キーラン:
私は、このコンパイルエラーで困惑しています。以下のコードを考えてみましょう、ConcreteClass1
次のコンパイル・エラーがあります。
エラー:(16、28)のjava:互換性のない型:java.util.Map java.lang.Stringで、java.lang.Stringで> java.util.Map java.lang.Stringで、java.lang.Object上位に変換することはできません>
しかし、ConcreteClass2
それが伸びるという理由だけで、正常にコンパイルAbstractClass
するのではなくAbstractClass<Object>
。どうしてこれなの?
abstract class AbstractClass<T extends Object> {
void testGenerics(Map<String, Object> map) {
}
}
class ConcreteClass1 extends AbstractClass<Object> {
public void testGenerics() {
Map<String, String> map = new HashMap<>();
super.testGenerics(map);
}
}
class ConcreteClass2 extends AbstractClass {
public void testGenerics() {
Map<String, String> map = new HashMap<>();
super.testGenerics(map);
}
}
チャールズDowbecki:
ConcreteClass2
省略ジェネリックinforamtionによる生タイプとして宣言されています。あたりとして公式生タイプチュートリアル:
(そのようなコレクションクラスなど)APIクラスの多くは、以前のJDK 5.0への一般的ではなかったので、生タイプは、レガシーコードに表示されます。生タイプを使用するときは、基本的に前のジェネリック医薬品の動作を取得します
上記のためtestGenerics(Map<String, Object> map)
と解釈されtestGenerics(Map map)
、それは任意で呼び出すことができるMap
オブジェクト。前のJava 5のコードとの後方互換性のためにすべて。
あなたは見てとることができJLS 4.8生タイプ。