@宏哥 你好,想跟你请教个问题:
用泛型限定一个集合容器,List<? extends AClass> list = new ArrayList<BClass>(),BClass是AClass的子类,这个list为什么就不能用add方法了,只能add空值,
用Object是jdk1.5之前的用法,有个说法是在jdk版本升级中,加入泛型是程序员要求最高的, 而且在开发中,泛型确实带来了一些方便,但是在看公司原码时,遇到很多接口的方法中,使用了长长的带通配符的泛型,比如<? extends E>,不好理解。 这个头像不错,哈哈
回复主要的考虑是兼容性,JVM不得不把类型信息擦除掉一部分,尤其是<...>里面的范型信息。所以,相比较DotNet,Java的范型没有太多的性能上的好处。
Java目前的范型没实际的意义。编译后都擦除了。
所以,不建议用C++的思想来用。
直接Object即可。
List<AClass> list 不就好了吗?List<? extends AClass> 等于是一个未知类型的泛型容器
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
用Object是jdk1.5之前的用法,有个说法是在jdk版本升级中,加入泛型是程序员要求最高的, 而且在开发中,泛型确实带来了一些方便,但是在看公司原码时,遇到很多接口的方法中,使用了长长的带通配符的泛型,比如<? extends E>,不好理解。 这个头像不错,哈哈
回复
主要的考虑是兼容性,JVM不得不把类型信息擦除掉一部分,尤其是<...>里面的范型信息。所以,相比较DotNet,Java的范型没有太多的性能上的好处。
Java目前的范型没实际的意义。编译后都擦除了。
所以,不建议用C++的思想来用。
直接Object即可。
List<AClass> list 不就好了吗?List<? extends AClass> 等于是一个未知类型的泛型容器