-2

List<Object>含まれている場合は完璧ですが、コンパイル時のエラーをスローせずList<Integer>に、java が含まれていることをテストできるようにするにはList<Integer>どうすればよいでしょうか。List<Object>

テストケース-1

Object obj = "one";
List<Object> objs = Arrays.<Object>asList("one", 2, 3.14, 4);
List<Integer> ints = Arrays.asList(2, 4);
assert objs.contains(obj); //Statement 1
assert objs.containsAll(ints); //Statement 2
assert !ints.contains(obj); //Statement 3 
assert !ints.containsAll(objs); //Statement 4

上記のケースステートメント 3 と 4 では、正常にコンパイルおよび実行されます。したがって、私の疑問は次のとおりです。

  1. コンパイル時にエラーが発生するはずなので、ステートメント 3 と 4 をどのように実行できますか?
  2. それはエラーですか、それとも矛盾したサポートを提供する何らかの理由がありますか?
4

3 に答える 3

1

コンパイル時にエラーが発生するはずなので、ステートメント 3 と 4 をどのように実行できますか?

これは、contains(object)任意のオブジェクトを取るためです。

それはエラーですか、それとも矛盾したサポートを提供する何らかの理由がありますか?

Java にジェネリックがある前は、contains(Object) を呼び出すことができたので、今日では、ジェネリックより前に書かれたコードを使用できます。

于 2013-09-03T12:15:55.543 に答える
0

この残念な決定は、Java 1.4 でコンパイルされたコードとの下位互換性のために行われなければなりませんでした。

これがなければ、1.4 のコードは、完全に再コンパイルしなければ 1.5 の環境ではまったく実行されませんでした。

于 2013-09-03T12:17:17.090 に答える