ListインターフェイスのlastIndexOf()メソッドは、Object型のパラメータを受け入れます。ListインターフェイスのlastIndexOf()メソッドが、Objectをパラメータとして受け取り、Eを受け付けないのはなぜですか?
しかし、add()方法は、Eを受け入れる)(ADDので(リストの作成時に定義されたリストの一般的な型である)タイプEのパラメータ を受け付け、これは(現像を防止コンパイル時に互換性のないオブジェクトをリストに追加することができます。
Javaのdocは、渡されたオブジェクトが互換性がない場合、lastIndexOf()がClassCastExceptionをスローできることを示しています。私は、Eclipse Heliosの中で、次のコードを実行したときしかし、私は、任意の例外を得ることはありません: - 1行目と2行目
package scjp.collection.list;
import java.util.ArrayList;
import java.util.List;
public class LastIndexOf {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
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
}
}
は、私はString型である私のリストに互換性のないオブジェクトを渡しました。 はしかし、私が手に出力されます: -
5
-1
-1
私はClassCastExceptionが取得していません。
lastIndexOf()メソッドがObject型のオブジェクトではなくE型のオブジェクトを受け入れていた場合、これはコンパイル時にのみ防止されていました。なぜこれはしないのですか?
Javaクリエイターは、E(オブジェクトではない)を受け入れる場合に発生する可能性のある問題を考えていたに違いありません。それはどんな害でしょうか?
http://docs.oracle.com/javase/1.5.0/docs/api/index.htmlを参照してください。引数がObjectであり、例外がスローされることは明らかです。 – xyz