A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王松朝 金牌黑马   /  2011-7-25 22:57  /  2167 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在书上看到这样一条代码
Class<?> cl= Class.forName(className);
在这加上<?>是什么意思呢

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 要认真看视频。

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-7-26 00:17:36
沙发
<?>是泛型通配符,可以在张老师高新技术“泛型”里看到。
Class<?>  
通俗的书就是“不管什么样类的字节码”
回复 使用道具 举报
那加和不加有什么区别么?
回复 使用道具 举报
黑马网友  发表于 2011-7-26 00:45:42
板凳
加上在第一次赋值这个通配符类型就确定了,编译阶段不可以接受别的类型。如果不写,则没这个功能
回复 使用道具 举报
黑马网友  发表于 2011-7-26 00:50:13
报纸
板凳正解.....(字数不够补丁)
回复 使用道具 举报
黑马网友  发表于 2011-7-26 08:07:08
地板
在泛型中没有向上转型这一概念。
范例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 10:14:38
8#
泛型中的?通配符 代表任意类型 带有通配符的定义的变量不能调用与参数类型有关的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马