有两个类A和B有类似的方法。如何编写一个泛型方法,该方法将类对象中的任何一个作为参数,并且能够调用该类的方法。
编辑:我无法控制A,B类。我只将它们作为参数。所以我无法修改添加它们。
public class methods {
public static void main(String[] args) {
new methods().getName(new B());
new methods().getName(new A());
}
private <T> void getName(T obj){
// obj.getName()
}
}
class A {
String name = "ClassA";
public void getName(){
System.out.println(name);
}
}
class B {
String name = "ClassB";
public void getName(){
System.out.println(name);
}
}
答案 0 :(得分:2)
如果这两个类没有实现公共接口,则可以使用反射,但这不是类型安全的(如果A或B不再支持getName()
并且反射很多,则不会出现任何编译错误比直接调用方法慢。
您还可以实现两个共享接口的适配器并使用它们(使用泛型):
interface Wrapper {
String getName();
}
class WrapperA implements Wrapper {
final private A a;
public WrapperA(A wrapped) {
this.a = wrapped;
}
@Override public String getName() {
return a.getName();
}
}
答案 1 :(得分:1)
以下解决方案使用通用方法中的instanceof operator
来达到您的输出。
public static void main(String[] args){
new methods().getName(new B());
new methods().getName(new A());
}
private <T> void getName(T obj) {
if(obj instanceof B){
((B) obj).getName();
}
else{
((A) obj).getName();
}
}