【发布时间】:2010-09-09 15:56:40
【问题描述】:
是否可以在 Java 中创建泛型类型的实例?根据我所见,我认为答案是no(由于类型擦除),但如果有人能看到我遗漏的东西,我会很感兴趣:
class SomeContainer<E>
{
E createContents()
{
return what???
}
}
编辑:事实证明,Super Type Tokens 可以用来解决我的问题,但它需要大量基于反射的代码,正如下面的一些答案所示。
我将暂时搁置这个问题,看看是否有人提出与 Ian Robertson 的Artima Article 截然不同的东西。
【问题讨论】:
-
刚刚在 Android 设备上测试了性能。 10000 次操作和:8-9 ms 采用 new SomeClass(),9-11 ms 采用 Factory
.createInstance(),64-71 ms 采用最短反射:SomeClass z = SomeClass.class.newInstance()。并且所有测试都在单个 try-catch 块中。反射 newInstance() 会抛出 4 个不同的异常,还记得吗?所以我决定使用工厂模式 -
在 Java 8 中,您现在可以传递构造函数引用或 lambda,这使得解决这个问题变得非常简单。详情请见my answer below。
-
我认为编写这样的代码是个坏主意,这是解决底层问题的更优雅和可读的方法。
-
@DavidCitron “一会儿”他说……从那时起已经十一年了……