为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

达令说 2019-06-01 16:44:15
在Java中创建泛型类型的实例?是否可以在Java中创建泛型类型的实例?我的想法是基于我所看到的答案no (由于类型擦除),但如果有人能看到我缺少的东西,我会感兴趣的:class SomeContainer<E>{     E createContents()     {         return what???     }}编辑:原来超级代币可以用来解决我的问题,但它需要大量基于反射的代码,如下所示。我暂时不谈这个问题,看看有没有人能拿出和伊恩·罗伯逊截然不同的东西Artima条款.
查看完整描述

4 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

不知道这是否有帮助,但当您的子类(包括匿名)泛型类型时,类型信息可以通过反射获得。例如,

public abstract class Foo<E> {

  public E instance;  

  public Foo() throws Exception {
    instance = ((Class)((ParameterizedType)this.getClass().
       getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
    ...
  }}

因此,当您子类foo时,您会得到Bar的一个实例,例如,

// notice that this in anonymous subclass of Fooassert( new Foo<Bar>() {}.instance instanceof Bar );

但这是很多工作,而且只适用于子类。不过很方便。


查看完整回答
反对 回复 2019-06-01
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

你需要某种抽象的工厂来推卸责任:

interface Factory<E> {
    E create();}class SomeContainer<E> {
    private final Factory<E> factory;
    SomeContainer(Factory<E> factory) {
        this.factory = factory;
    }
    E createContents() {
        return factory.create();
    }}


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 1603 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信