泛型类型的实例[重复]
Posted
技术标签:
【中文标题】泛型类型的实例[重复]【英文标题】:Instance of type generic [duplicate] 【发布时间】:2010-07-06 14:27:15 【问题描述】:我的问题是这样的:
为什么不能用new T()来实例化一个泛型类型,而用类Class的newInstance()可以呢?
【问题讨论】:
相关:***.com/questions/75175/…, ***.com/questions/731452/… 如果T
没有合适的构造函数怎么办?
【参考方案1】:
您需要使用反射 (newInstance()
),因为在编译时需要链接其构造函数的类是未知的。所以编译器无法生成链接。
【讨论】:
【参考方案2】:由于类型擦除:泛型类型在执行时不知道T
是什么,所以它不能调用正确的构造函数。
更多信息请参见Angelika Langer's FAQ entry on type erasure。
【讨论】:
【参考方案3】:也许,您正在查看这种模式(取自对另一个 question 的回答):
private static class SomeContainer<E>
E createContents(Class<E> clazz)
return clazz.newInstance();
在这里,当我们创建SomeContainer
时,我们使用具体类(如String
)为实例参数化。 createContents
将只接受 String.class
,String.class.newInstance()
将创建一个新的(空)字符串。
【讨论】:
【参考方案4】:如果您在编译时知道类型,请使用“newwhatever()”。如果您在编译时不知道类型,但可以为其获取 Class 对象,请使用 newInstance()。
99% 的时间我都知道类型并且我使用“newwhatever()”。
【讨论】:
以上是关于泛型类型的实例[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin泛型 ① ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )