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

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

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

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

编辑:原来超级代币可以用来解决我的问题,但它需要大量基于反射的代码,如下所示。

我暂时不谈这个问题,看看有没有人能拿出和伊恩·罗伯逊截然不同的东西Artima条款.


达令说
浏览 1604回答 4
4回答

慕盖茨4494581

不知道这是否有帮助,但当您的子类(包括匿名)泛型类型时,类型信息可以通过反射获得。例如,public&nbsp;abstract&nbsp;class&nbsp;Foo<E>&nbsp;{ &nbsp;&nbsp;public&nbsp;E&nbsp;instance;&nbsp;&nbsp; &nbsp;&nbsp;public&nbsp;Foo()&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;instance&nbsp;=&nbsp;((Class)((ParameterizedType)this.getClass(). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getGenericSuperclass()).getActualTypeArguments()[0]).newInstance(); &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;}}因此,当您子类foo时,您会得到Bar的一个实例,例如,//&nbsp;notice&nbsp;that&nbsp;this&nbsp;in&nbsp;anonymous&nbsp;subclass&nbsp;of&nbsp;Fooassert(&nbsp;new&nbsp;Foo<Bar>()&nbsp;{}.instance&nbsp;instanceof&nbsp;Bar&nbsp;);但这是很多工作,而且只适用于子类。不过很方便。

收到一只叮咚

你需要某种抽象的工厂来推卸责任:interface&nbsp;Factory<E>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;create();}class&nbsp;SomeContainer<E>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;Factory<E>&nbsp;factory; &nbsp;&nbsp;&nbsp;&nbsp;SomeContainer(Factory<E>&nbsp;factory)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.factory&nbsp;=&nbsp;factory; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;createContents()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;factory.create(); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java