Java Final クラスは通常のクラスでは拡張できませんが、ジェネリック型は拡張できます。これは何を意味しますか?たとえば、Integer は JAVA API の最終クラスです。このクラスは拡張できませんが、次のコードではエラーは表示されません。
public class SampleClass<T extends Integer> {
// memebers
}
Java Final クラスは通常のクラスでは拡張できませんが、ジェネリック型は拡張できます。これは何を意味しますか?たとえば、Integer は JAVA API の最終クラスです。このクラスは拡張できませんが、次のコードではエラーは表示されません。
public class SampleClass<T extends Integer> {
// memebers
}
コードはエラーを示していませんが、型パラメーターの実際のバインディングは、正しくお気づきのように、クラスであるため、クラスにTする必要があります。ジェネリック型パラメーターは、キーワードを使用していますが、実際のクラスを定義していません。したがって、投稿したコードにエラーはありません。IntegerIntegerfinalextends
これは、コンパイラTが型Integerまたはから派生した型であると想定しているためIntegerです。
Integerはfinalクラスなので、Tのみ可能Integerです。
このエラーは、からタイプを作成しようとしている場合にのみ発生する可能性がありますInteger
たとえば、コンパイラはここでエラーをスローします。
class IncompilableInteger extends Integer { }
から型を作成しようとしているためですIntegerが、これはしません:
class Compilable <T extends Integer> { }
タイプのオブジェクトを含むタイプを作成しようとしているためです。これは、Integerまたはから派生したタイプですが、それ自体Integerは異なりませんInteger。