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

Java 通过构造函数继承抽象类泛型,java,generics,inheritance,polymorphism,java-8,Java,Generics,Inheritance,Polymorphism,Java 8,我想做如下的模型,其中泛型抽象类从构造函数(ala ArrayList())获取类型 公共抽象类AbstractParent{ 受保护的抽象父对象(T…参数){ //(...) } } 公共子级扩展到父级{ 公共儿童(U参数,V参数2){ super(param,param2); } } 但我不能用“?”或父母的T作为“?”类型。 我想让Child成为AbstractParent Child是一个AbstractParent如果您希望父类型是U和V的某个超类型,您仍然必须在Chil

我想做如下的模型,其中泛型抽象类从构造函数(ala ArrayList())获取类型

公共抽象类AbstractParent{
受保护的抽象父对象(T…参数){
//(...)
}
}
公共子级扩展到父级{
公共儿童(U参数,V参数2){
super(param,param2);
}      
}
但我不能用“?”或父母的T作为“?”类型。 我想让
Child
成为
AbstractParent

Child
是一个
AbstractParent如果您希望父类型是U和V的某个超类型,您仍然必须在
Child
的泛型参数中明确指定它。您可以做的最接近的事情是
类Child扩展AbstractParent


你不能自动推断出一个普通的超类型,就像你暗指的
数组一样;你不能在类型级别这样做。

我想到了它,但它不是一个干净的API,因为这样一来,任何人都需要传递X类型,即使它是对象,而且编译器比我们更聪明,在多个嵌套的更复杂的体系结构中,找到最小的超公共classes@Whimusical对于表达式来说可能是这样,但是编译器不允许您在想要表达它的上下文中表达它。这是最好的,这是不正确的<代码>数组。如果愿意,asList(“a”、“b”)
也可以返回
列表。目标类型决定了这一点。类似地,
Arrays.asList(“a”,1)
也可以返回
列表
,如果您愿意的话。但由于类的声明需要实际类型,因此类声明需要该实际类型的正式声明。但您必须将它们强制转换为Object,不是吗?至少在Eclipse中,将光标放在上面会告诉您返回的类型no,您不需要强制转换。在Java8中,您可以简单地编写
listl=Arrays.asList(“a”、“b”)。Eclipse的UI将向您展示的是另一个故事。如果他们有一天能正确地使用编译器,我们会很高兴的……但是一个列表!=列出编译器为什么允许强制转换?没有强制转换。在Java8中,当指定两个
字符串作为初始内容时,首先创建
列表
是没有问题的。一个
列表可以容纳两个
字符串。看见
public abstract class AbstractParent<T> {

    protected AbstractParent(T... params){
        //(...)
    }
}

public Child<U,V> extends AbstractParent<????>{
    public Child(U param, V param2){
         super(param, param2);
    }      
}