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