Java泛型

N 人看过

关于Java泛型以及泛型存不存在父子类关系的个人理解

1、泛型是在JDK1.5引进的语言特性,泛型通过一种类型或方法操纵各种类型的对象,同时又提供了编译时的类型安全保证。(个人的理解是就是把对象的类型在操作之前给确定了,避免出现不同类型对象之间的指向错误,像Java基本数据类型double与float转换要加类型转换,不然要出错,但是泛型针对的是对象实例)

2、 泛型技术的基本思想是类和方法的泛化,是通过参数实现的,因此泛型又被称作参数化类型,即通过定义含有一个或多个类型的类或接口,使得程序员可以对具有类似的特征与行为的类进行抽象。(对同一个类型的许多实例或同一个类型的接口进行操作)

3、
①. 在Java中,父类的变量可以指向子类的对象,子类可以认为是与父类兼容的类型,如下面代码

Object a = new Object();
Integer b = new Integer(10);
a = b;  //父变量指向子对象

②. 对于泛型来说:可以使用一个父类作为类型参数调用泛型,在对参数化类的访问中使用该父类的子类对象,代码如下(假定有个Number类型的B类):

B <Number> b= new B<Number>();
b.add(new Integer(10)); 
b.add(new  Double(10.1));

泛型也是同样适用,但是泛型这种到底存不存在父子关系呢?这不是证明了是父子关系了,但还是有问题的,假设Java中允许List <String> 是 List <Object>的子类,代码如下:

List <String> ls = new Arraylist <String>();//ls存放的是具有类型的对象
List <Object> lo = new ls;
lo.add(new Object());
String s =ls.get(0);

但是最后一行代码是不符合Java机制的,由于通过lo可以将Object 对象放入列表,从而出现通过String类型变量ls访问到Object对象情况,即ls.get(0)返回对象类型是Object的。String类型的变量s是不能够指向Object对象的,String类型要比Object弱。所以说假设是不成立的。

总结一下就是: 调用泛型的实参类型之间可以有有父子关系,调用后得到的参数化类型之间不会具有同样的父子关系。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。