13

間違ったタイプのオブジェクトがcompareToメソッドに渡された場合、どのタイプの例外をスローする必要がありますか?

ClassCastException?

4

2 に答える 2

21

一般的な意味でIllegalArgumentExceptionは、渡された値が正しい値ではない場合です。

ただし、以下の@Tomの回答が示すClassCastExceptionように、タイプが正しくない場合もあります。ただし、これを行うユーザーコードはまだ見つかりません。

ただし、より基本的にはcompareTo、ジェネリックスでwithを使用している場合は、コンパイル時エラーになります。

このことを考慮:

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    @Override
    public int compareTo(Person o) {
       return this.name.compareTo(o.name);
    }
}

上記の例で間違ったタイプが渡される可能性はどこにありますか?

于 2012-05-03T11:39:39.153 に答える
7

当然のことながら、APIドキュメントでは、この場合にスローされる例外を指定しています。

ClassCastException-指定されたオブジェクトのタイプにより、このオブジェクトとの比較ができない場合。

ジェネリックスを使用していると仮定すると、誰かがraw型、リフレクション、またはその他の安全でない手法を使用してメソッドを呼び出そうとすると、この例外が自動的に発生します。

于 2012-05-03T11:47:36.480 に答える