我想做一个类似下面的模型,其中泛型抽象类从构造函数中获取类型(ala ArrayList())
public abstract class AbstractParent<T> {
protected AbstractParent(T... params){
//(...)
}
}
public Child<U,V> extends AbstractParent<????>{
public Child(U param, V param2){
super(param, param2);
}
}
但我不能使用&#39;?&#39;或父母的T&#39; ????&#39;类型。
我希望Child<String,String>
成为AbstractParent<String>
Child<String,Integer>
是AbstractParent<? extends Object>
,
...类似于Arrays.asList()
方法的工作原理:asList("a","b")
返回List<String>
,而asList("a",1)
返回List<? extends Object>
。
为什么不允许这样做或者我该如何解决它?
答案 0 :(得分:2)
如果您希望父类型具有U和V的某种超类型,您仍然必须在Child
的通用参数中明确指定它。你可以做的最接近的事情就是class Child<X, U extends X, V extends X> extends AbstractParent<X>
。
您无法自动推断出常见的超类型,因为您似乎在暗示Arrays.asList
在做什么;你不能在类型级别那样做。