Метод lastIndexOf() интерфейса List принимает параметр типа Object.
Однако метод add() принимает параметр типа E (который является родовым типом списка, определенным во время создания списка). Поскольку add() принимает только E, это не позволяет разработчику (или пользователю) добавить любой несовместимый объект в список во время компиляции.
Теперь в Java doc говорится, что lastIndexOf() может выбросить ClassCastException, если переданный объект несовместим. Однако, когда я запускаю следующий код в Eclipse Helios, я не получаю никакого исключения :-
package scjp.collection.list;
import java.util.ArrayList;
import java.util.List;
public class LastIndexOf {
public static void main(String[] args) {
List list = new ArrayList();
list.add("some");
list.add("thing");
list.add("at");
list.add("last");
list.add("and");
list.add("at");
list.add("again");
System.out.println(list.lastIndexOf("at"));
System.out.println(list.lastIndexOf(10)); // # 1
System.out.println(list.lastIndexOf(new LastIndexOf())); // # 2
}
}
В строке 1 и строке 2 я передал несовместимые объекты в мой список, который имеет тип String. Однако, вывод, который я получаю :-
5
-1
-1
Я не получаю исключения ClassCastException.
Если бы метод lastIndexOf() принимал объекты типа E, а не объекты типа Object, это можно было бы предотвратить только во время компиляции. Почему это не сделано???
Создатели Java, должно быть, подумали о какой-то проблеме, которая может возникнуть, если принимать E (а не Object). Какой вред это принесет???