访问Java泛型函数中的具体属性

Joy*_*Joy 1 java generics

我是Java泛型的新手.我写了一个如下函数:

  public class C<T extends MyClass> implements MyInterface<T>{
      public void f(T obj){
         ...
         obj.getName()
      }
   }
Run Code Online (Sandbox Code Playgroud)

上面的函数f被调用两种类型的对象MySubClass1MySubClass2.MySubClass1并且MySubClass2是从抽象类继承的两个concreter类MyClass,name是一个属性MySubClass2.

当用对象调用f时MySubClass2,我想访问上面的名字.我无法弄清楚如何做到这一点.

T.J*_*der 5

...而name是MySubClass2的一个属性

那么你的方法就不能依赖于它,因为它obj可以是任何衍生出来的东西MyClass.

这表明您的设计应该更改,以便您拥有单独的方法或将名称移动到MyClass.

可以instanceof支票和演员做到这一点:

if (obj instanceof MySubClass2) {
    String name = ((MySubClass2)obj).getName();
}
Run Code Online (Sandbox Code Playgroud)

...但十分之九,使用instanceof应该让你退后一步并重新考虑你的设计.