我有以下两个课程:
public Class A{
String name;
Integer age;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
和
public Class B{
String name;
Integer age;
Integer height;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
和以下方法
public String getMyName(B b){
return b.getName()+" "+b.getAge()+" "+b.getHeight();
}
Run Code Online (Sandbox Code Playgroud)
是否有可能重构此方法以使用泛型,这将允许我为这两个不同类的对象调用它?
例如
public <T> String getMyName(T t){
return t.getName()+" "+t.getAge()+( t instanceof B ? " "+t.getHeight() : "");
}
Run Code Online (Sandbox Code Playgroud)
当然它不起作用,因为t不知道方法getName,getAge和getHeight.
类没有任何关系(我知道它们可以从一个公共类继承并使用,<T extends C>但它们没有超类或公共接口)
Tho*_*mas 10
不,如果不使用通用接口或超类,这对于泛型来说是不可能的.你可以使用反射,但我建议反对,并建议提供一个通用的界面.
正如其他人所说,还有其他方法来处理这种情况(例如方法重载或传递Object,使用instanceof和强制转换),但如果你可以使用通用接口,我仍然会这样做.
请注意,Java泛型是unlinke C++泛型/模板,它们可以提供您想要做的事情 - 并且有很好的理由来解决这个问题.