次のクラスを定義すると
public class SomeClass<T extends A> {..}
もちろん、この方法で変数を定義することはできません-B
無関係なクラスです。
SomeClass<B> instance = new SomeClass<B>();
しかし、これは機能します:
SomeClass instance = new SomeClass();
私は何が欠けていますか?
Javaのジェネリックはオプションです。
それらを使用する場合は、「適切に」使用する必要があります。
ただし、それらをまったく使用しない場合は、正常にコンパイルされます(ただし、それらが提供する型安全機能を見逃しているため、コンパイル時に警告が表示されるはずです)。
ジェネリックはコンパイル時です。実行時には、SomeClassのみです。次のような非一般的なリストを作成するのと同様です。
List list = new ArrayList(); // you will get warning to use generics
ジェネリックスはあなたを助け、型の安全性を提供しますが、コンパイル時にだけです。コードを正しくコンパイルすると、ジェネリック型が消去され、コードの観点からは、リストはジェネリックを含まない通常のリストのように見えます。
その理由の1つは、下位互換性でした。ジェネリックなしのリストを使用する古い1.4コードは、新しいコードと同様に実行されます。したがって、ジェネリックスやジェネリックスを使用する他のクラスなしでリストを作成できます。しかしもちろん、あなたはどんなタイプの安全性も失います。