在 Java 中创建泛型类型的实例?

新手上路,请多包涵

是否可以在 Java 中创建泛型类型的实例?根据我所看到的,我在想答案是 no ( _由于类型擦除_),但如果有人能看到我遗漏的东西,我会很感兴趣:

 class SomeContainer<E>
{
    E createContents()
    {
        return what???
    }
}

编辑:事实证明, Super Type Tokens 可以用来解决我的问题,但它需要大量基于反射的代码,正如下面的一些答案所表明的那样。

我会把它打开一会儿,看看是否有人想出与 Ian Robertson 的 Artima 文章 截然不同的东西。

原文由 David Citron 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
1 个回答

你是对的。你不能做 new E() 。但是你可以把它改成

private static class SomeContainer<E> {
    E createContents(Class<E> clazz) {
        return clazz.newInstance();
    }
}

这很痛苦。但它有效。将其包装在工厂模式中使其更容易容忍一些。

原文由 Justin Rudd 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题