несоответствие между Sun JRE javac и Eclipse java compiler? - PullRequest
4 голосов
/ 14 апреля 2010

Это смущает меня. Следующее компилируется нормально под 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 голосов
/ 14 апреля 2010

Это известная ошибка в javac - «Вывод завершается ошибкой для ограничения на возврат переменной типа»:

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

6 голосов
/ 14 апреля 2010

Есть несоответствия между двумя компиляторами. Я обнаружил похожие ошибки, иногда в Eclipse, а иногда и в JDK.

Я не уверен, что не так в этом случае. Проблема, по-видимому, связана с сочетанием дженерики и автобокс.

В любом случае, если вы явно укажете параметр типа вместо того, чтобы полагаться на вывод типа, он скомпилирует:

public boolean argh() { 
  return GenericHelper.<Boolean>fail(); 
}
0 голосов
/ 28 сентября 2011

Хотя это проблема с компилятором, следующее изменение типа возвращаемого значения на логический объект должно помочь вам исправить то же самое.

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

...