5.8.1 创建类型实例

在Erased.java中对创建一个new T()的尝试无法实现,部分原因是擦除,另一部分原因是编译器不能验证T具有默人构造函数。但是在C++中,可以很安全。

Java中的解决方案是传递一个工厂对象,并使用它来创建新的实例。最便利的工厂对象就是Class对象,因此如果使用类型标签,可以使用newInstance()来创建这个类型的新对象:

class ClassFactory<T>{

 T x;

public classAsFactory(Class<T> kind){

  try{

       x=kind.newInstance();

    }catch(Excetion e)

}

}

但是这种方法对于classAsFactory<Integer>失败,因为Integer没有任何默认的构造器。这个错误不能再编译器期获得。采用显示的工厂对象

模板方法设计模式:get()是模板方法,而create()是子类中定义的,用来产生子类类型的对象:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值