【java学习笔记】Class对象【3】泛化的Class引用

定义一个Class对象的引用可以任意地指向任何Class对象

Class intClass = int.class;
intClass = double.class;

然而如果你操作有误(将本应指向int.class的引用指向了double.class),只有在运行时才可能发现错误的赋值,因为编译器不知道那你的意图,不会报错。Java SE5提供了Class泛型,对Class引用指向的Class对象进行了限定。

Class<Integer> intClass = int.class;
//intClass = double.class;//编译期报错

使用Class泛型的目的是让编译期进行类型检查,误操作时编译期报错,及时发现错误。
通配符?表示任何类型

Class<?> intClass = int.class;
intClass = double.class;

Class<?>与Class使用效果是等价的,但是Class<?>有不同的表示意义,Class<?>表示我就是选择了不具体的类型。


Integer是Number子类,但Integer的Class对象 不是 Number的Class对象 的子类

//class<Number> numberClass = int.class;//不合法

使用Class<? extends Number>表示一个范围,限定Class为Number子类的Class对象

class<? extends Number> numberClass = int.class;//OK

使用泛型的Class引用.newInstance(),返回的是确切类型的实例对象,而不是Object。
除了类似Class<? super FancyToy>的引用调用newInstance(),返回Object类型的实例。
Class<? super FancyToy>表示“某个类,是FancyToy的超类”,是含糊的,所以返回Object类型的实例。

class Toy{}

class FancyToy extends Toy{}

public class GenericClass {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		Class<? super FancyToy> up = Toy.class;
		Object obj = up.newInstance();//返回Object
		Class<Toy> toyClass = Toy.class;
		Toy toy = toyClass.newInstance();//返回Toy
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值