泛型小结 博客分类: Java CC++C#
程序员文章站
2024-03-20 19:12:52
...
例子:
public class A { void get(Class<B> clazz) { } void call() { get(B.class); get(C.class); // error:C类不是B类, C只是B的子类 } void getM(Class<? extends B> clazz) { } void callM() { getM(B.class); getM(C.class); } void list() { List<B> rs = new ArrayList<B>(); rs.add(new B()); rs.add(new C()); //correct,因为C的实例可以认为是B类型的 rs.get(1); //return type is B List<C> ss = new ArrayList<C>(); ss.add(new B()); //error: B的实例不可以认为是是C类型的 ss.add(new C()); rs = ss; //error: C类型的List不能转为B类型的List List<? extends B> ms = new ArrayList<B>(); ms.add(new B()); //error: 因为有?号,代表未知类型,而不是B,也不是C ms.add(new C()); //error: 同上 ms = ss; rs = ms; //error: 未知类的List不能转为B类型的List ms.get(0); //return type is B } <T> T[] makeArray(T t) { T aa = new T(); return new T[100]; // error:因为类型变量在运行时不存在,也就没有办法在运行时检查数组的实际类型了 } class B {} class C extends B {} }
看上在例子,总结出以下几点:
1在泛型的应用当中,也要注意类和对象的区别,比如上面C类是B类的子类,但是,C类并不是B类。而C的实例对象可以认为是B类型的;
2带有通配符?的集合不能加入元素;
3子类的集合不能转为父类型的集合;
4不存在运行的泛型类型变量,只有在编译时有。
推荐阅读
-
泛型小结 博客分类: Java CC++C#
-
JAVA泛型 博客分类: java java
-
java基础之泛型 博客分类: java基础
-
java基础之泛型 博客分类: java基础
-
串行规则执行器rules-executor 博客分类: java 规则执行器串行规则执行器过滤型规则条件型规则
-
java easyui 树型结构 查询 封装 博客分类: jQuery easyuijava javaeasyui树型结构查询封装
-
关于反射泛型的封装 博客分类: java
-
mybatis泛型Dao参考四 博客分类: mybatis mybatis
-
关于反射泛型的封装 博客分类: java
-
mybatis泛型Dao参考一 博客分类: mybatis ibatis 泛型DAO接口的设计 博客分类: 结构设计 DAOiBATISMySQLOracleSpring