чем отличается T func0() {} от <T> T func() {} в java?
чем отличается T func0() {}
от <T> T func() {}
в java?
чем отличается T func0() {}
от <T> T func() {}
в java?
На самом деле, тут без контекста нельзя однозначно ответить. Возможны две ситуации:
T
Рассмотрим первый случай:
class Byb<T> {
T func1(T a) {
return a;
}
<T> T func2(T a) {
return a;
}
}
Первый метод будет использовать тип T
, передаваемый классу. Вполне естественный вариант, тут всё очевидно.
У второго метода мы явно пишем тип T
. В этом случае он скроет тип T
у класса и будет использовать свой тип T
. Можем убедиться в этом на примере:
Byb<Integer> byb = new Byb<>();
System.out.println(byb.func1(5).getClass());
System.out.println(byb.func2("Hello").getClass());
Результат:
class java.lang.Integer
class java.lang.String
Классу передали Integer
, но в метод со своим типом T
передали String
, и тип T
стал именно String
-ом.
Рассмотрим второй случай:
class Byb {
T func1(T a) {
return a;
}
<T> T func2(T a) {
return a;
}
}
Теперь первая функция просто-напросто неверна. Мы не знаем, что такое тип T
, так как его нет ни у класса, ни явно прописанного у метода. Из-за этой функции код не запустится.
А по второй функции - всё так же, как было описано для первого случая. Будет просто использоваться свой тип T
.