Java 具有泛型参数类型的重载构造函数(扩展与扩展和接口)

Java 具有泛型参数类型的重载构造函数(扩展与扩展和接口),java,generics,constructor,overloading,extends,Java,Generics,Constructor,Overloading,Extends,因为如果我实现了它,它将始终选择第一个构造函数。如果您知道避免此问题的其他方法,请告诉我。这是遗留问题。有关说明,请参见此问题: 只有使用两个不同的工厂方法和两个不同的名称,才能真正解决此问题: A is abstract public B(A parameter) { //...do some stuff with A features } public B(I parameter) { //...do some stuff with I features } 请参阅(例如

因为如果我实现了它,它将始终选择第一个构造函数。如果您知道避免此问题的其他方法,请告诉我。

这是遗留问题。有关说明,请参见此问题:

只有使用两个不同的工厂方法和两个不同的名称,才能真正解决此问题:

A is abstract

public B(A parameter) {
    //...do some stuff with A features
}
public B(I parameter) {
    //...do some stuff with I features
}

请参阅(例如),泛型重载有问题。您可以在构造函数中使用
if(参数instanceof I).
自定义其行为。我的问题是,我调用了一个超级(参数),我必须编写内联IFs。。。但我认为这是我应该走的路。
A is abstract

public B(A parameter) {
    //...do some stuff with A features
}
public B(I parameter) {
    //...do some stuff with I features
}
class B {
    public static <T extends A> B create(T param) {
        return new B(/*...*/);
    }

    public static <T extends A & I> B createWithI(T param) {
        return new B(/*...*/);
    }

    private B(/*args*/) {
        //...
    }
}
class B
{
    @SuppressWarnings("unchecked")
    public <T extends A, AI extends A & I> B(T param) {
        if (param instanceof I) {
            AI ai = (AI) param;
            // A and I
        }
        else {
            // Just A
        }
    }
}