вторник, 9 июня 2009 г.

Баг Java компилятора

Удивительные вещи. На работе случайно написал код, который вызывает ошибку компилятора java. Этот пример можно проиллюстрировать таким вот кодом, который компилится при помощи Eclipse и не компилится при помощи javac:
public class X
{
<T extends X> T f1() throws Exception
{
return null;
}

<U extends X> U f2() throws Exception
{
return f1();
}
}

javac выдает следующую ошибку:
X.java:6: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T 
with upper bounds U,X
return f1();
^


Если заменить "return f1()" на "return this.<U>f1()", то javac проглатывает. Этот баг также известен здесь http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6302954. И судя по комментам не исправлен в 1.6.13 и исправлен в 1.7. Только я вот одного не понимаю, как же оно в Eclipse компилится...

1 комментарий:

  1. В Eclipse своя реализация компилятора, она не зависит от стандартного.

    ОтветитьУдалить