Может ли кто-нибудь объяснить, почему второй класс не компилируется?
1 Компилируется нормально с использованием javac и JDK 6 (Eclipse пожалуется на этот код)
public class SameSignatureMethods {
public <T extends String> Boolean test()
{
return true;
}
public <T extends Character> Double test()
{
return 1d;
}
}
2 Небольшое изменение в этом примере, и компиляция завершится неудачно со следующей ошибкой:
name clash: <T>test() and <T>test() have the same erasure
Единственное изменение - это тип возвращаемого значения для метода:
public class SameSignatureMethods {
public <T extends String> Boolean test()
{
return true;
}
public <T extends Character> Boolean test() {
return true;
}
}
вот как основной метод для первого класса будет выглядеть:
public static void main(String[] args) {
SameSignatureMethods m = new SameSignatureMethods();
System.out.println("m.<Character>test()=" + m.<Character>test());
System.out.println("m.<String>test()=" + m.<String>test());
}