假设我有两个构造函数采用某种类型的输入。 (本例中为T1和T2)
我想从一个更通用的构造函数中调用它们中的任何一个(或者任何超类T1和T2)
class Test{
public Test(T1 input){...}
public Test(T2 input){...}
public Test(Object input){
if(input instanceof T1)
this((T1) input);
if(input instanceof T2)
this((T2) input);
}
第三个构造函数会发出编译错误,因为this
构造函数调用不在第一行。
答案 0 :(得分:3)
您可以使用以下一种工厂方法:
public class Test {
private Test(T1 input) {
// ...
}
private Test(T2 input) {
// ...
}
public static Test createTest(Object input) {
if (input instanceof T1)
return new Test((T1) input);
if (input instanceof T2)
return new Test((T2) input);
return null;
}
}
答案 1 :(得分:2)
只需编写一个构造函数(带有Object参数的构造函数),然后将另外两个构造函数转换为私有方法,而不是编写三个构造函数。现在称它为:
class Test{
private void initT1(T1 input){...}
private void initT2(T2 input){...}
public Test(Object input){
if(input instanceof T1)
initT1((T1) input);
else if(input instanceof T2)
initT2((T2) input);
}
}
答案 2 :(得分:0)
instanceof是必要的吗?当T1是T2的超类时。
class T1 { }
class T2 extends T1 { }
class Test {
public Test(T1 input) { ... }
public Test(T2 input) {
this((T1)input); // T2 extends T1.
// or
if(input instanceof T1) { this((T1)input); }
...
}
}