Java 6 ではMyClass
とMyClass<?>
は等しいと見なされていましたが、Java 7 ではそうではありません。
Java 7 では、例として、インスタンスが与えられた Hamcrest マッチャーとMyClass
match を期待するマッチャーで問題が発生しMyClass<?>
、コンパイル エラーが発生します。
no suitable method found for assertThat(MyClass,Matcher<MyClass<?>>)
[ERROR] method Assert.<T#1>assertThat(T#1,Matcher<? super T#1>) is not applicable
[ERROR] (actual argument Matcher<MyClass<?>> cannot be converted to Matcher<? super MyClass> by method invocation conversion)
変更の理由 rawtype と、指定されていない型引数を持つジェネリック型の違いは何ですか?
提案された回答は、私がここで疑問に思っていることを実際には説明していません。コメントの 1 つは、「バインドされていないワイルドカード (メソッド シグネチャなど) の使用は、問題のメソッドがジェネリックを認識しており、そのオブジェクトのジェネリック型を尊重するという約束を示している」と述べています。ここでも、それが単なる「シグナル」であれば、コンパイル時に問題が発生することはないと思います。
含まれているものや動作するものに関する情報MyClass<?>
だけだと思いますが、追加情報はないので、同等と見なす必要がありますか?MyClass
<?>