繁体   English   中英

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

[英]inconsistency between Sun JRE javac and Eclipse java compiler?

这让我很困惑。 以下在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

什么给出,我该如何解决?

这是javac的已知错误 - “类型变量返回约束的推理失败”:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6302954

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

在这种情况下,我不确定哪个是错的。 问题似乎是由于泛型和自动装箱的结合。

在任何情况下,如果您明确指定type参数,而不是依赖于类型推断,它将编译:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM