我是Java泛型新手。我写了一个像下面这样的函数:

  public class C<T extends MyClass> implements MyInterface<T>{
      public void f(T obj){
         ...
         obj.getName()
      }
   }


上面的函数f被两种对象MySubClass1MySubClass2调用。 MySubClass1MySubClass2是从抽象类MyClass继承的两个更具体的类,并且nameMySubClass2的属性。

当用MySubClass2的对象调用f时,我想访问上面的名称。我不知道该怎么做。

最佳答案

...名称是MySubClass2的属性


这样,您的方法就不能依赖它了,因为obj可以是MyClass派生的任何东西。

这表明您的设计应进行更改,以使您可以使用单独的方法,也可以将名称移至MyClass

您可以通过instanceof检查和强制转换来实现:

if (obj instanceof MySubClass2) {
    String name = ((MySubClass2)obj).getName();
}


...但是,十分之九,使用instanceof应该使您退后一步,重新考虑设计。

关于java - 访问Java泛型函数中的具体属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48032994/

10-09 00:10