Я изучаю общую функцию Java, и я не уверен, как объяснить третью строку в следующем методе main
:
public class Example4 {
public static void main(final String[] args) {
System.out.println(Util.<String>compare("a", "b"));
System.out.println(Util.<String>compare(new String(""), new Long(1)));
System.out.println(Util.compare(new String(""), new Long(1)));
}
}
class Util {
public static <T> boolean compare(T t1, T t2) {
return t1.equals(t2);
}
}
Первая строка компилирует, запускает и возвращает (как ожидалось) false
.
Вторая строка не компилируется, как ожидалось, потому что я явно смешиваю String
и Long
.
Третья строка компилирует, запускает и возвращает false, но я не знаю, как это работает: компилятор /JVM создает тип параметра T
как Object
? (Также был бы способ получить этот объявленный тип T
- время выполнения?)
Спасибо.