Java通用方法擦除顺序

时间:2013-09-09 10:05:54

标签: java intellij-idea

我使用Java 1.6u32。 在遗留代码中我有方法:

static <T> T lookup(Class<? super T> interfaceClass){...}

它有三种用法:

ConcreteX x = lookup(InterfaceX.class);
InterfaceX x = lookup(InterfaceX.class);
lookup(InterfaceX.class).someMethodOfInterfaceX();

问题在于,当我使用一些ant构建脚本时,第三个编译,但是当我在Intellij Idea中构建项目时,它会失败。 错误信息是:

... cannot find symbol:
symbol: method someMethodOfInterfaceX()
location: class java.lang.Object

当我明确地转换为InterfaceX时,IDEA构建成功:

((InterfaceX)lookup(InterfaceX.class)).someMethodOfInterfaceX();

代码是错误的,不应该用ant编译或者IDEA编译器有问题吗?

编辑: - 用于重现错误的类:

public class ErasureProblem {
    public static void main(String[] args) {
        ImplementationX n = lookup(InterfaceX.class);
        lookup(InterfaceX.class).m();
    }

    static <T extends Object> T lookup(Class<? super T> cls){
        return null;
    }
}

public class ImplementationX implements InterfaceX {
    @Override
    public Integer m() {
        return 0;
    }
}

public interface InterfaceX {
    Integer m();
}

0 个答案:

没有答案