实例和泛型

new与newInstance()的区别
Class cla=Class.forName(“java.lang.String”);//初始化
Object obj=cla.newInstance();//实例化为object类
String str=(String)obj;//向下转换回子类
Class.forName会导致类被初始化,newInstance()才会实例化;
而new()初始化+实例化
相比较,new的语句简单,可以在创建时加入参数调用构造函数,而newInstance()把创建对象步骤分开,使得更灵活

T,Class,Class<?>区别

  1. 调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。
    List list = null;
    Class clazz = list.getClass();

  2. 使用Class类的中静态forName()方法获得与字符串对应的Class对象。
    Class clazz = Class.forName(“com.lyang.demo.fanxing.People”);

  3. 获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。
    Class clazz = List.class;

那么问题来了?Class类是创建出来了,但是Class和Class<?>适用于什么时候呢?
People people = (People) Class.forName(“com.lyang.demo.fanxing.People”).newInstance();
看到了么,需要强转,如果反射的类型不是People类,就会报
java.lang.ClassCastException错误。

使用Class泛型后,不用强转了

public class Test {
	public static <T> T createInstance(Class<T> clazz) throws IllegalAccessException, 	InstantiationException {
	return clazz.newInstance(); 
	}
	
	public static void main(String[] args) throws IllegalAccessException, InstantiationException {
		Fruit fruit= createInstance(Fruit .class); 
		People people= createInstance(People.class);
	}
}

那Class和Class<?>有什么区别呢?
Class在实例化的时候,T要替换成具体类
Class<?>它是个通配泛型,?可以代表任何类型,主要用于声明时的限制作况
例如可以声明一个:public Class<?> clazz;
但是你不能声明一个:public Class clazz;
不知道定声明什么类型的Class的时候可以定义一个Class<?>,Class<?>可以用于参数类型定义,方法返回值定义等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值