我有以下课程:
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] 删除。
我来说两句