【发布时间】:2012-11-03 17:45:05
【问题描述】:
抱歉标题含糊。我有这段代码可以在 Eclipse Juno (4.2) 上编译,但不能在 javac (1.7.0_09) 上编译:
package test;
public final class Test {
public static class N<T extends N<T>> {}
public static class R<T extends N<T>> {
public T o;
}
public <T extends N<T>> void p(final T n) {}
public void v(final R<?> r) {
p(r.o); // <-- javac fails on this line
}
}
错误是:
Test.java:13:错误:Test 类中的方法 p 不能应用于给定类型; p(r.o); ^ 要求:T 找到:N所以问题是:
这是
javac错误还是 Eclipse 错误?-
有什么方法可以在
javac上编译,而不更改v方法的签名(即保留通配符)?我知道将其更改为
<T extends N<T>> void v(final R<T> r)确实可以编译,但我想知道是否有办法首先避免这种情况。此外,方法p不能更改为<T extends N<?>> void p(final T n),因为内容具有需要精确约束T extends N<T>的类型。
【问题讨论】:
-
@Nambari:也是1.7。另外,Eclipse 不使用
javac编译代码,而是使用自己的编译器。 -
它在我的 eclipse 中用 java 6 编译,你用的是什么 java 版本?
-
@AmitD:是的,它可以在 Eclipse 1.6 和 1.7 上运行,但它不能与 OpenJDK 6 和 7 的 javac 编译,也不能使用 Sun's JDK 6 on ideone。
-
@Nambari: stackoverflow.com/questions/3061654/….
-
我认为没有办法使用 javac 进行编译,除非您按照建议进行更改。
标签: java eclipse generics javac