黑马程序员技术交流社区
标题:
注解 通配符问题
[打印本页]
作者:
王松朝
时间:
2011-7-25 22:57
标题:
注解 通配符问题
在书上看到这样一条代码
Class<?> cl= Class.forName(className);
在这加上<?>是什么意思呢
作者:
匿名
时间:
2011-7-26 00:17
<?>是泛型通配符,可以在张老师高新技术“泛型”里看到。
Class<?>
通俗的书就是“不管什么样类的字节码”
作者:
王松朝
时间:
2011-7-26 00:33
那加和不加有什么区别么?
作者:
匿名
时间:
2011-7-26 00:45
加上在第一次赋值这个通配符类型就确定了,编译阶段不可以接受别的类型。如果不写,则没这个功能
作者:
匿名
时间:
2011-7-26 00:50
板凳正解.....(字数不够补丁)
作者:
匿名
时间:
2011-7-26 08:07
在泛型中没有向上转型这一概念。
范例1:一个引例。[code=java]package cxy.zy.generic;
public class Test {
public static void main(String[] args) {
Point<Object> p1 = new Point<Object>(12,23);
Point<Integer> p2 = new Point<Integer>(5,2);
p1 = p2; //错误
}
}[/code]假设咱们有一个Ponit类,其内有两个属性x、y 。
在Java中可以将一个Integer对象赋值给一个Object类:
|- Object obj = new Integer(23)
但是在泛型中 使用范例中的代码就是错误的。
|- p1 = p2;
|- 原因很简单:
|- p2是Point<Integer> 类型的引用变量 而不是Integer类型的变量。
|- p1是Point<Object> 类型的引用变量 而不是Object类型的变量。
|- 简单的说 p1和p2不再是简单的Integer、Object类型了 而变成一个复杂的类型了。
|- 因此将一个 Point<Integer>类型的对象赋值给Ponit<Object>类型的变量是错误的。
范例2:WildCard 。[code=java]package cxy.zy.generic;
public class Test {
public static void main(String[] args) {
Point<?> p1 = new Point<Object>(12,23);
Point<?> p2 = new Point<Integer>(5,2);
p1 = p2;
}
}[/code]程序中的“?”表示:
|- p1和p2可以接受任意 Ponit< T > 类型的对象。
|- 注意:不是可以接受任意类型的对象 而是可以接受任意Point<T>类型的对象。
|- 简单地说,只要是Point<T>类型的对象,不论是Point<Object>还是Point<Integer>类型的,都可以被Point<?>所接受。
作者:
王松朝
时间:
2011-7-26 08:20
不知道我理解的对不对,字节码也是对象,不同的字节码就是不同的对象
作者:
匿名
时间:
2011-7-26 10:14
泛型中的?通配符 代表任意类型 带有通配符的定义的变量不能调用与参数类型有关的方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2