访问泛型类的静态方法

cin*_*cin 1 java generics methods static

我想在类上访问静态方法,但是要在泛型中传递该类.

我做了以下事情:

class Base{
  public static String getStaticName(){
    return "Base";
  }
}


class Child extends Base{
  public static String getStaticName(){
    return "Child";
  }
}

class StaticAccessor{
  public static <T extends Base>String getName(Class<T> clazz){
    return T.getStaticName();
  }
}

StaticAccessor.getName() // --> "Base"
Run Code Online (Sandbox Code Playgroud)

这将返回"基地",但我想要的是"孩子"任何人没有反思的建议吗?

Joa*_*uer 9

如果没有反射,你不能这样做,因为类型T在运行时被删除(意味着它将被减少到它的下限,这是Base).

既然你有权访问Class<T>你可以用反射做到这一点,但是:

return (String) clazz.getMethod("getStaticName").invoke(null);
Run Code Online (Sandbox Code Playgroud)

请注意,我认为这样的代码是代码味道,而且它非常脆弱.你能告诉我们你为什么需要这个吗?