开发者

inconsistency between Sun JRE javac and Eclipse java compiler?

开发者 https://www.devze.com 2022-12-27 10:45 出处:网络
This confuses me. The following compiles fine under Eclipse. package com.example.gotchas; public class GenericHelper1 {

This confuses me. The following compiles fine under 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

 }

}

But if I try to do a clean build with ant, or at the command line with javac, I get this:

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

what gives, and how do I fix it?


This is a known bug in javac - "Inference fails for type variable return constraint":

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


There are inconsistencies between the two compilers. I've found similar bugs, sometimes in Eclipse and sometimes in the JDK.

I'm not sure which is wrong in this case. The problem appears to be due to the combination of generics and auto-boxing.

In any case, if you specify the type parameter explicitly, instead of relying on type inference, it will compile:

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


While this is an issue with the compiler, the following change of return type to Boolean object should help you fix the same.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号