我是Java泛型的新手.我写了一个如下函数:
public class C<T extends MyClass> implements MyInterface<T>{
public void f(T obj){
...
obj.getName()
}
}
Run Code Online (Sandbox Code Playgroud)
上面的函数f被调用两种类型的对象MySubClass1和MySubClass2.MySubClass1并且MySubClass2是从抽象类继承的两个concreter类MyClass,name是一个属性MySubClass2.
当用对象调用f时MySubClass2,我想访问上面的名字.我无法弄清楚如何做到这一点.
...而name是MySubClass2的一个属性
那么你的方法就不能依赖于它,因为它obj可以是任何衍生出来的东西MyClass.
这表明您的设计应该更改,以便您拥有单独的方法或将名称移动到MyClass.
你可以用instanceof支票和演员来做到这一点:
if (obj instanceof MySubClass2) {
String name = ((MySubClass2)obj).getName();
}
Run Code Online (Sandbox Code Playgroud)
...但十分之九,使用instanceof应该让你退后一步并重新考虑你的设计.