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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ying 中级黑马   /  2013-1-16 22:08  /  1662 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ying 于 2013-1-17 15:05 编辑

Class<?> x = null;
  Class<Object> y = null;
  
  x = y;
  y = x;

为什么 x =  y;都没有问题,
而 y = x; 都出错?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

7 个回复

倒序浏览
Object 是 API 类库 跟类,是任何运行程序父类,
x=y 成立  
x=Object.getClass

y=x 不成立
y=<?>   jvm自动加载类,没有给它指定一个类赋值给y,实际上从?捕捉扩展的Object ,那么就是 一个不确定的类型,肯定会报错

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
Class<?> x = null;
  Class<Object> y = null;
  
  x = y;  // 编译通过
  y = x; //编译通不过
那么Object为所有类型的父类,而x类型虽然还没有确定,但一经确定他也肯定是Object子类啊!
也为Object是所有类的父类啊!让子类等于父类不正确吗?更具java的特性,多有子类的类型都是
父类的类型,子类的类型不就属于父类的类型吗?
回复 使用道具 举报
x = y;这是把y的指向拿给x 吗?
回复 使用道具 举报
Class<?> x = null;
Class<Object> y = null;
x=y;
y的泛型制定的是一个Object类型的数据,x指向的是任意类型的数据,因为任意类型数据的范围要大于Object所有y赋值给x能成功
y=x;
因为x是任意类型,所以你把x赋值给y,范围大的赋值给范围小的肯定会报错

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
张敬培 发表于 2013-1-17 00:42
Class x = null;
Class y = null;
x=y;

任意类型的,这个任意类型,若果指定了,你说它不是Object的子类吗?子类不是父类的类型吗?
回复 使用道具 举报
在泛型类型的定义的时候,没有类的继承一说。
例如:
Collection<Object> collection = new ArrayList<Object>();//可以
Collection<Object> collection = new ArrayList();//可以
Collection<Object> collection = new ArrayList<String>();//编译出错,定义的时候可以装Object,但是你实际装的只是String,类型不对应
Collection<?> collection = new ArrayList<String>();//编译通过,因为?代表任意类型,就不会考虑后面的集合装的是什么类型了
回复 使用道具 举报
ying 中级黑马 2013-1-17 15:05:00
8#
嗯!问题解决啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马