Компиляторы ведут себя по-разному с нулевым параметром универсального метода
Следующий код прекрасно компилируется с 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 не соответствуют границам переменных типа (s) P, T
найденный :<P,T>
недействительным
требуется: недействительно
doIt(null);
^
Обратите внимание, что если я заменяю нулевой параметр ненулевым значением, он компилируется нормально.
Какой из компиляторов ведет себя правильно и почему? Это ошибка одного из них?