Следующий код отлично компилируется с Eclipse, но не компилируется с помощью javac:
public class HowBizarre {
public static <P extends Number, T extends P> void doIt(P value) {
}
public static void main(String[] args) {
doIt(null);
}
}
Я упростил код, поэтому T теперь не используется вообще. Тем не менее, я не вижу причины для ошибки. По какой-то причине javac решает, что T обозначает Object, а затем жалуется, что Object не соответствует границам T (что истинно):
HowBizarre.java:6: несовместимые типы; аргумент (-ы) вывода java.lang.Number, java.lang.Object не соответствуют ограничениям типа переменная P, T
найдено:
<P,T>
voidтребуется: void
doIt(null); ^
Обратите внимание, что если я заменил нулевой параметр на ненулевое значение, он компилируется отлично.
Какой из компиляторов ведет себя правильно и почему? Это ошибка одного из них?