Сегодня я понял, что это компилируется и работает нормально:
public class Test {
public static <T> T handle(T val) {
System.out.println("T");
return val;
}
public static <T extends String> T handle(T val) {
System.out.println("T extends String");
return val;
}
}
Два метода handle
имеют одно и то же имя и одинаковое число и тип (?
) Параметров. Единственное отличие состоит в том, что второй метод handle
имеет более строгую общую привязку. IDE вообще не жалуется, и код компилируется нормально. При запуске метод выбирается как ожидалось - например, Test.handle("this is a string")
вызывается во второй метод, а Test.handle(10)
будет вызывать первый.
Рассматривается ли обобщенная часть частичной подписи метода? или это метод магии разрешения перегрузки?