抽象类泛型通过构造函数继承

时间:2016-01-07 19:32:29

标签: java generics inheritance polymorphism java-8

我想做一个类似下面的模型,其中泛型抽象类从构造函数中获取类型(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>

为什么不允许这样做或者我该如何解决它?

1 个答案:

答案 0 :(得分:2)

如果您希望父类型具有U和V的某种超类型,您仍然必须在Child的通用参数中明确指定它。你可以做的最接近的事情就是class Child<X, U extends X, V extends X> extends AbstractParent<X>

您无法自动推断出常见的超类型,因为您似乎在暗示Arrays.asList在做什么;你不能在类型级别那样做。