2016-01-24 3 views
0

Почему Java не позволяет этому переезжать? Есть ли что-то, что мне не хватает?Правила для верховой езды при использовании Коллекций

class Abc 
{ 
    public void add (List<String> li) 
    { 

    } 

} 
public class Test extends Abc { 
    public static void main(String args[]) 
    { 

    } 

    @Override 
    public void add (List<Object> li) 
    { 

    } 

Хотя это позволяет метод переопределить, если я удалить

<Object> 

и просто написать список Ли в методе над верхом, который на самом деле так же, как

List<Object> 

Также чтобы добавить, он позволяет преодолевать, если оба метода переполнения и перегрузки имеют одинаковый тип.

List<String> - over-ridden method 
List<String> - over-riding method 
+0

Поскольку список не является списком . И поскольку использование необработанных типов говорит компилятору: делайте так, как будто общих типов не существует. http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p, http://stackoverflow.com/questions/2770321/what- is-a-raw-type-and-why-shouldnt-we-use-it –

+0

Вы переопределяете использование дженериков. –

+0

@JBNizet: Можете ли вы рассказать о том, «используя необработанные типы, говорит компилятор: делайте так, как будто общих типов не существует». – Genius

ответ

1

Это ограничение (ошибка дизайна?) В том, как Generics был разработан на Java.

Ваше ожидание разумно, но способ, которым они решили реализовать (и определить), Дженерики сделали его неосуществимым.

Однако, если вы думаете об этом, их дизайн, возможно, более разумным, чем ваши ожидания: в практическом плане, List<String> вероятно, не может быть непосредственно преобразован в List<Object> - что-то должно создать совершенно новый List, над скопировать содержимое ,

Смежные вопросы