Почему метод lastIndexOf() интерфейса List принимает в качестве параметра Object, а не E?

Метод 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). Какой вред это принесет???

7
задан whitehat 31 January 2012 в 07:38
поделиться