美文网首页
Java泛型-Android面试准备2019-1-23

Java泛型-Android面试准备2019-1-23

作者: LLorenzo | 来源:发表于2019-01-26 13:45 被阅读0次

接口

接口到底是干什么的?答:接口是用来指明相关或者不相关类的多个对象的共同行为(共同方法)。例如,使用正确的接口,可以指明这些对象是可比较的、可食用的、以及可克隆的等等。

泛型

泛型使我们可以定义带泛型类型的类或接口或方法,随后编译器会用具体的类型来替换它。

优点:能够在编译时而不是在运行时检测出错误,因此可以提高软件的可靠性和可读性。其实很好理解,我们自定义一个整型栈类,栈类里面是一个ArrayList,如果ArrayList里面元素类型使用Object,此时无论是Integer类还是String类的实例都可以放进去,但是应该放进去Integer类实例,如果传错了(譬如传了一个String类实例)将不会报错,但使用了泛型的话,在编译时就会报错。

注意:泛型类型必须是引用类型,不能使用基本数据类型(int,double,char)来替换泛型类型,但可以使用Integer,这时可以传入一个int,Java会将其包装为Integer,这个过程称作自动打包。同样,如果元素是包装类型(Integer,Double,Character),那么可以直接将这个元素赋给一个基本类型的变量,这个过程称为自动拆箱。

定义泛型类:

为了定义一个类为泛型类型,需要将泛型类型放在类名之后,例如StringStack<E>。

注意:为了创建一个字符串堆栈,可以使用new StringStack<String>(),但需要注意定义这个类的构造方法时不写泛型标识,应该被定义为public StringStack() {},即不进行显式定义,使用Java默认提供的无参构造方法即可。

定义泛型方法:

为了定义一个方法为泛型类型,要将泛型类型放在方法返回类型之前,例如<E> void printMax(E o1, E o2)。

可以为静态方法定义泛型类型。

泛型方法的定义与调用 受限的泛型类型

通配泛型:

1.为什么需要通配泛型?

首先,Integer是Number的子类。我们现在定义了一个方法用来找到栈中的最大值,签名是public static double max(GenericStack<Number> stack),如果这时有一个类型为GenericStack<Integer>的栈实例integerStack,语句int a = max(integerStack)会报错,因为integerStack不是GenericStack<Number>的实例。尽管Integer是Number的子类型,但是GenericStack<Integer>并不是GenericStack<Number>的子类型,这时我们需要通配泛型类型。

2.通配泛型类型

通配泛型类型有三种:?(非受限通配符)、? Extends T()或者? super T。

?称为非受限通配,它和? extends Object是一样的。? Extends T()称为受限通配,表示T或T的一个子类型。? super T称为下限通配,表示T或T的一个父类型。

将上面的函数签名改为public static double max(GenericStack<? Extends Number> stack)即可,<? Extends Number>是一个表示Number或Number子类型的通配类型。

消除泛型:

编译器可使用泛型信息,但这些信息在运行时是不可用的,这被称为类型消除。编译器使用泛型类型信息来编译代码,但是随后会消除它,即泛型信息在运行时是不可用的。泛型存在于编译时,一旦编译器确认泛型类型是安全使用的,就会将它转换为原始类型。

例子:

将a编译成b

如果一个泛型类型是受限的,那么编译器就会用该受限类型来替换它。

例子:

将a编译成b

非常需要注意的是,不管实际的具体类型是什么,泛型类是被它的所有实例所共享的。

相关文章

  • Java泛型-Android面试准备2019-1-23

    接口 接口到底是干什么的?答:接口是用来指明相关或者不相关类的多个对象的共同行为(共同方法)。例如,使用正确的接口...

  • Android-基本的MVP结构的模板工程(泛型,Rx通用请求,

    关键实践链接: Android-Java-泛型-总得有个开始的篇 Android-Java-泛型-官方文档走一走 ...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • 泛型

    java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一Java泛型深入理解加泛型面试数组的协变性与范型的不可变性

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 泛型常见的面试题

    1. Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中...

  • java基础

    八、泛型 面试题==什么是泛型中的限定通配符和非限定通配符 ?这是另一个非常流行的Java泛型面试题。限定通配符对...

  • android面试 系统复习系列(一)泛型

    android面试 系统复习系列(一)泛型 泛型的本质 泛型的本质是为了参数化类型。也就是说在泛型使用过程中,操作...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Android中泛型的应用(二)

    背景感谢并参考[怪盗kidou]的《搞定Gson泛型封装》 。上一篇《 Java基础--Android中泛型的应用...

网友评论

      本文标题:Java泛型-Android面试准备2019-1-23

      本文链接:https://www.haomeiwen.com/subject/idqrjqtx.html