Java 从泛型调用静态方法

Java 从泛型调用静态方法,java,generics,Java,Generics,我对Java中的泛型类有一个问题,我不知道如何解决它。几天前,我开始用java和泛型编程,所以这可能是一个众所周知的问题。我的类定义如下: public Class LocalAuthCommand<T extends LocalAuth> { public LocalAuthCommand() { ... } public String execute() throws CustomException { String

我对Java中的泛型类有一个问题,我不知道如何解决它。几天前,我开始用java和泛型编程,所以这可能是一个众所周知的问题。我的类定义如下:

public Class LocalAuthCommand<T extends LocalAuth> {
    public LocalAuthCommand() {
        ...
    }

    public String execute() throws CustomException {
          String result = super.execute();
          T obj = T.unMarshall(result);
    }
}
public类localauth命令{
公共LocalAuthCommand(){
...
}
公共字符串execute()引发CustomException{
字符串结果=super.execute();
T obj=T.unMarshall(结果);
}
}
unMarshall是一种静态方法,在LocalAuth的所有子类中实现。所有的T类都实现了这个方法,但我不知道如何让Java知道解组在T中是作为静态方法存在的。有什么办法解决这个问题吗


谢谢

T
在运行时被擦除,因此在调用
unMarshall
时,对
T
的引用被边界类
LocalAuth
替换。我可以想出两种方法:

  • 显式传入要
    解组的
    ,并进行反射式调用
  • 对每个
    T
    进行
    execute
    抽象,并为每个
    T
    创建一个具体的
    LocalAuthCommand
    子类,以便在编译时知道要为每个子类调用的确切
    unMarshall
    方法

  • 在LocalAuth中,可以使用
    公共静态字符串解组(字符串结果)
    公共抽象字符串解组(字符串结果)
    。您不能同时拥有抽象和静态的方法。

    静态方法不需要实例。该方法最好不是静态的。代码所做的基本上是用一些xml字符串(结果)构造一个t对象。用于解组XML字符串的代码是T类中的静态方法。我需要它是静态的,因为我正在用XML构建一个对象,所以我还没有可以用来调用该方法的实例。LocalAuth是否定义了unMarshall方法?还是只在子类中定义它们?它应该在超类中,这样编译器就可以知道T也有itI,我想我将使用#2,这是实现这一点而不必使用反射的唯一方法。谢谢