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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈国柱 中级黑马   /  2013-9-21 22:14  /  1923 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈国柱 于 2013-9-24 22:07 编辑

Class<Number> x = String.class.asSubclass(Number.class);
asSubclass方法返回的类型不也是Number类型的吗?为什么这句话不能通过编译器?

3 个回复

倒序浏览
  1. Class<Number> x = (Class<Number>) String.class.asSubclass(Number.class);
复制代码
转换类型
回复 使用道具 举报

编译时没问题了,但是运行的时候就出问题了,抛出了"java.lang.ClassCastException: class java.lang.String"异常,泛型好像没有起作用,好像没有用泛型一样
回复 使用道具 举报
本帖最后由 狼人→浪人 于 2013-9-21 23:00 编辑

asSubclasspublic <U> Class<? extends U> asSubclass(Class<U> clazz)强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。检查强制转换的有效性,如果无效则抛出 ClassCastException。如果此方法成功了,它将始终返回对此 class 对象的一个引用。 此方法的使用场合为:客户端需要“收缩转换” Class 对象的类型,以便将其传递给某个 API,且该 API 对它愿意接受的 Class 对象进行限制。强制转换会产生一个编译时警告,因为强制转换的正确性无法在运行时检查(因为常规类型是通过擦除实现的)。
返回:此 Class 对象,它被强制转换以表示指定类对象的子类。 抛出: ClassCastException - 如果该 Class 对象不表示指定类的子类(这里“子类”包括该类本身)。

解决办法可以试一下如下:

try{
Class<Number> x = String.class.asSubclass(Number.class);
}catch(ClassCastException){
}


评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马