嵌套泛型继承

JDC

我有以下课程:

class Field<T> {

  private final Class<T> type;

  public Field(Class<T> type) {
    this.type = type;
  }
}

class Pick<V> {
  private final V value;
  private final Class<V> type;

  public Pick(V value, Class<V> type) {
    this.value = value;
    this.type = type;
  }
}

与问题相关的课程:

class PickField<T> extends Field<Pick<T>> {

  public PickField(Class<Pick<T>> type) {
    super(type);
  }
}

现在,这似乎已被编译器接受。不幸的是,我不知道/不知道如何创建一个新的实例PickField,例如用于String挑选。

这确实-当然-不起作用:
new PickField<String>(Pick.class)

这是不允许的(我想我理解原因):
new PickField<String>(Pick<String>.class)

那怎么办呢?还是整个方法都以某种方式“闻到”?

康斯坦丁·约夫科夫

我认为PickField应该Pick使用实例进行参数化

所以这样做应该很好:

class PickField<T extends Pick<T>> extends Field<T> {

    public PickField(Class<T> c) {
        super(c);
    }
}

然后,您可以使用以下方法实例化它:

PickField<SomeSpecificPick> instance = new PickField<>(SomeSpecificPick.class);

其中SomeSpecificPick定义为:

public class SomeSpecificPick extends Pick<SomeSpecificPick> {

    public SomeSpecificPick(SomeSpecificPick value, Class<SomeSpecificPick> type) {
        super(value, type);
    }
}

更多信息(与主题相关):

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章