После кода дает ошибку компиляции с ошибкой «Дублированный методом»Дубликат метод, а метод-Перегрузки
static int test(int i){
return 1;
}
static String test(int i){
return "abc";
}
Ожидается, что это и как перегруженный метод имеет одинаковую сигнатуру и отличается только типом возвращаемого значения.
Но следующий код компилируется нормально с предупреждением:
static int test1(List<Integer> l){
return 1;
}
static String test1(List<String> l){
return "abc";
}
Как мы знаем, что Java Дженерики работает на Erasure, которые означают в байт-код, оба эти метода имеют точно такую же подпись и отличается возвращаемый тип.
Furthur, к моему удивлению, следующий код снова дает ошибку компиляции:
static int test1(List<Integer> l){
return 1;
}
static String test1(List l){
return "abc";
}
Как это второй код работает отлично, не давая какой-либо ошибки компиляции, хотя есть дубликат метод?
Это потому, что как «Список списка», так и «Список» являются одним и тем же интерфейсом, вы, вероятно, захотите [прочитать] (http://docs.oracle.com/javase/6/docs/api/java/ util/List.html) 'Список '. –
Azad
@AzadOmer: Во время выполнения из-за Erasure весь список одинаковый. Таким образом, даже вторая должна давать ошибку компиляции, если только ее функция времени разработки. – Abhinav
Вы также можете прочитать этот вопрос на самом деле, возможно, дубликат для вашего вопроса [Нажмите здесь] (http://stackoverflow.com/questions/8042561/java-override-constructor-using-listcustomobjects-same-erasure-error) – Azad