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
する必要があります。ジェネリック型パラメーターは、キーワードを使用していますが、実際のクラスを定義していません。したがって、投稿したコードにエラーはありません。Integer
Integer
final
extends
これは、コンパイラT
が型Integer
またはから派生した型であると想定しているためInteger
です。
Integer
はfinal
クラスなので、T
のみ可能Integer
です。
このエラーは、からタイプを作成しようとしている場合にのみ発生する可能性がありますInteger
たとえば、コンパイラはここでエラーをスローします。
class IncompilableInteger extends Integer { }
から型を作成しようとしているためですInteger
が、これはしません:
class Compilable <T extends Integer> { }
タイプのオブジェクトを含むタイプを作成しようとしているためです。これは、Integer
またはから派生したタイプですが、それ自体Integer
は異なりませんInteger
。