У меня странная проблема, которую я действительно не понимаю.Почему мой LinkedList не содержит метод addLast()?
Я создал LinkedList таким образом:
List<String> customList = new LinkedList<String>();
Если проверить тип customList
с помощью list instanceof LinkedList
я получаю true
, так customList является LinkedList.
Теперь, если я пытаюсь выполнить метод addLast() на customList я получаю сообщение об ошибке Eclipse:
The method addLast(String) is undefined for the type List<String>
Метод addList определен в классе LinkedList, но единственный способ, чтобы использовать этот метод для объявить customList как LinkedList, а не как список, таким образом:
LinkedList<String> customList= new LinkedList<String>();
или я должен использовать бросок:
((LinkedList<String>) list).addLast(...);
Я действительно не понимаю такого поведения, есть ли кто-нибудь, кто может дать мне какой-то намек? Можете ли вы также дать мне ссылку или другую ссылку, чтобы понять эту проблему?
Заранее спасибо
Хорошо, но мой customList является LinkedList, в соответствии с экземпляром. Поэтому я ожидаю, что могу использовать весь метод LinkedList –
@EmanueleGiarlini Но вы можете легко назначить экземпляр ArrayList той же переменной, а ArrayList не имеет метода addLast. Вот почему компилятор этого не позволяет. – Eran
Ваш customList - LinkedList * now *, но это может быть любой вид списка позже, как объяснил Эран, поэтому компилятор не позволяет использовать методы, отличные от List. Компилятор не выполняет код (просто проверяет его на соответствие некоторым правилам), и он не может предсказать, какой customList будет во время выполнения. Если вам здесь не нужен полиморфизм, нет необходимости объявлять его как список. Вы должны проверить некоторые ссылки на полиморфизм в программировании, чтобы узнать больше об этом. –