这让我很困惑。以下在Eclipse下编译好。
package com.example.gotchas;
public class GenericHelper1 {
static <T> T fail() throws UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
/**
* just calls fail()
* @return something maybe
*/
public boolean argh() { return fail(); }
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
但如果我尝试使用ant
或使用javac
的命令行进行干净构建,我会得到:
src\com\example\gotchas\GenericHelper1.java:14: type parameters of <T>T cannot be determined; no unique maximal instance
exists for type variable T with upper bounds boolean,java.lang.Object
public boolean argh() { return fail(); }
^
1 error
给出了什么,以及如何解决它?
答案 0 :(得分:7)
这是javac
中的已知错误 - “类型变量返回约束的推理失败”:
答案 1 :(得分:6)
两个编译器之间存在不一致。我发现了类似的错误,有时在Eclipse中,有时在JDK中。
我不确定在这种情况下出了什么问题。问题似乎是由于组合 仿制药和自动拳击。
在任何情况下,如果您明确指定type参数,而不是依赖于类型推断,它将编译:
public boolean argh() {
return GenericHelper.<Boolean>fail();
}
答案 2 :(得分:0)
虽然这是编译器的问题,但以下将返回类型更改为Boolean对象应该可以帮助您修复它。
public Boolean argh(){return fail(); }