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
}
}
}