黑马程序员技术交流社区

标题: 问题已经解决反射类对象的泛型问题? [打印本页]

作者: 郑彬    时间: 2012-8-15 14:37
标题: 问题已经解决反射类对象的泛型问题?
本帖最后由 郑彬 于 2012-8-17 00:08 编辑

Class<? extends String> cls1=str1.getClass();
Class<String> cls2=String.class;
Class<?> cls3=Class.forName("java.lang.String");
为什么这样写,一定要加泛型吗?视频上都没有这样要求?
是不是自己的MyEclipse版本的问题?我是10.0版本的。

作者: 王程    时间: 2012-8-15 16:02
泛型不是一定要加,可以不加的,而且泛型仅仅用于编译时检查代码有没有错误,编译之后就没有用了。
但是泛型有它的好处,
第一:源代码保护。
第二:类型安全。这点是最显而易见的,抛弃了使用ArrayList时各种强制类型转换。
第三:更清晰地阅读代码。因为没有了强制类型转换,所以代码自然显得更清晰。
第四:更好的运行效率,因为泛型可以避免装箱和拆箱所带来的损耗,垃圾回收的次数也会减少。这点正是泛型神奇的地方,开发历史上抽象能力的上升往往意味着性能的下降,但是泛型却不是!
作者: 陈红建    时间: 2012-8-15 19:26
最主要的还是 为了提高你对数据操作的安全性
还有阅读性。
也是对数据操作容器的归类
作者: 郑彬    时间: 2012-8-15 23:23
王程 发表于 2012-8-15 16:02
泛型不是一定要加,可以不加的,而且泛型仅仅用于编译时检查代码有没有错误,编译之后就没有用了。
但是泛 ...

Class<? extends String> cls1=str1.getClass();
这句话能具体解释一下吗
作者: 郑彬    时间: 2012-8-15 23:23
陈红建 发表于 2012-8-15 19:26
最主要的还是 为了提高你对数据操作的安全性
还有阅读性。
也是对数据操作容器的归类 ...

Class<? extends String> cls1=str1.getClass();
这句话能具体解释一下吗
作者: 陈红建    时间: 2012-8-15 23:25
郑彬 发表于 2012-8-15 23:23
Class

泛型就是 将一个集合 指定为某种类型。例如ArrayList<Integer> 这个集合中只能存放Integer类型的数据

泛型中的通配符 "?"
限定边界(上边界)可以限定Number类以及继承它的子类
ArrayList<? extends Number> = new ArrayList<Integer>()
ArrayList<? extends Number> = new ArrayList<String>() 这样是错误的因为String不是Number的子类

限定边界(下边界)可以限定Integer以及他的父类
ArrayList<? super Integer> = new ArrayList<Number>()
ArrayList<? super Integer> = new ArrayList<byte>() 这样是错误的因为byte不是Integer的子类

作者: 陈红建    时间: 2012-8-16 13:52
申请加分
作者: 郑彬    时间: 2012-8-17 00:08
问题已经解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2