Sun JRE的javac和Eclipse的java编译器之间存在不一致性?

4

这让我感到困惑。在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

什么出了问题,我该怎么修复它?
3个回答

7

6

两个编译器之间存在不一致性。我发现了类似的错误,有时在Eclipse中,有时在JDK中。

我不确定这种情况哪一个是错误的。问题似乎是由泛型和自动装箱的组合引起的。

无论如何,如果您明确指定类型参数,而不是依赖类型推断,它将会编译:

public boolean argh() { 
  return GenericHelper.<Boolean>fail(); 
}

0

虽然这是编译器的问题,但将返回类型更改为布尔对象应该可以帮助您解决相同的问题。

public Boolean argh() { return fail(); }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接