泛型
为什么要引用泛型?(jdk1.5后提出)
在JAVA语言中,为了方便接受参数类型的统一,提供了核心类Object,利用此类对象可以接收所有类型的数据,但是因为其描述的范围过大,传入的参数,和方法体里实际处理的参数类型不同时,就会出现ClassCastExpcetion。(比如,方法体里实际处理的是2个参数的数值计算,但是我却传入的是字符型)。这些错误在编译时不会告诉开发者,而是在执行中才会产生,而造成此问题的原因就是Object类型接收的范围数据过大(接收了引用类型和基本数字类型)。
为了解决这种问题,最核心的方案就是避免向下转型(通过Object接收,然后转型到具体的实例对象),所以提出泛型,泛型的核心思想是:类中的属性和方法的参数与返回值的类型采用动态标记,在对象实例化时动态的配置要使用的数据类型。
注意,泛型只允许设置引用数据类型。
泛型在类上标记后,需要通过实例化对象进行类型配置,而所设置的类型只能够是引用类型。如果,要设置基本类型,则必须采用包装类(这就是为什么在jdk1.5之后要引用类对象的自动装箱和拆箱机制)
泛型通配符:
在方法中,参数类型的动态匹配通过 ”?” 来标记。使用 ? 通配符作为动态匹配传入的对象,只能够获取,而不能够去修改对象的属性。
泛型的上下限:
1.【类和方法】设置泛型的上限(? extends 类) : 只能够使用当前类或当前类的子类来设置泛型。
如: ? extends Number :可以设置Number或其子类作为泛型。
2.【方法】设置泛型的下限(? super 类) : 只能够设置指定的类或类的父类
? super String 只能够设置String或String的父类Object.