Java泛型代码在eclipse中编译,但不在命令行中编译

Dan*_*ana 3 java eclipse generics javac

我知道过去有几个问题是关于在eclipse中编译而不是在命令行中编译的东西,但我还没找到问题的答案.

特别是,我认为我能够设置eclipse使用我的系统编译器,但仍然没有解决问题.

我目前正在检查:'首选项 - > Java - >已安装的JRE'.

这只包含一个JRE,这是我的系统之一.

以下是问题的具体细节

我有一个java泛型类,它将Enum类型作为参数,如下所示:

public class MyClass<T extends Enum<T>>
Run Code Online (Sandbox Code Playgroud)

在类的某个地方,我将已知的枚举值与T的值进行比较.例如,让我们假设我有这个枚举:

public enum OtherEnum{
 a,
 b
}
Run Code Online (Sandbox Code Playgroud)

然后我测试:

protected void foo(T enumVal){
    if(enumVal == OtherEnum.a){
        // do something
    }
    else if(enumVal == OtherEnum.b){
        // do something else
    }
}
Run Code Online (Sandbox Code Playgroud)

这在eclipse中编译没有问题,但在命令行javac中我收到此错误:

无与伦比的类型:T和OtherEnum

我在两个使用java 1.6变体(1.6.0_26和1.6.0_16)的系统上尝试了这个.一个是Mac,另一个是linux.他们都给出了同样的错误,而eclipse正在编译而没有任何问题.

所以:

  1. 如何确定使用哪个编译器eclipse?

  2. 甚至这里的问题是什么?

谢谢!

小智 5

这是一个已在JDK 7中修复的javac错误.

请参见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6548436