从泛型调用静态方法

时间:2014-02-07 21:59:22

标签: java generics

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

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

    public String execute() throws CustomException {
          String result = super.execute();
          T obj = T.unMarshall(result);
    }
}

unMarshall是一个在LocalAuth的所有子类中实现的静态方法。所有T类都实现了这个方法,但我不知道如何让Java知道unMarshall确实存在于T中的静态方法。任何想法如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

  1. 明确传递您想要的Class unMarshall并反复拨打电话。
  2. 使execute抽象为每个LocalAuthCommand创建T的具体子类,以便在编译时知道要为每个子类调用的确切unMarshall方法时间。

答案 1 :(得分:0)

在LocalAuth中,您可以拥有public static String unMarshall(String result)public abstract String unMarshall(String result)。你不能拥有抽象和静态的方法。