Javaジェネリックを再グレードする質問があります。私が知っているように、一般的な情報はコンパイル時にのみ利用可能です。「型消去」と呼ばれるプロセスを通じて、コードがコンパイルされて.classファイルが作成されると、すべてのTYPE情報が消えます。
つまり、.javaファイルがコンパイルされると、List myList = new arrayList()は、リストが.javaファイル内の文字列のリストとして宣言されている場合でも、.classファイルのバイトコードに含まれます。
そうは言っても、以下のシナリオを検討してください。
署名付きのメソッドを含むjarファイルがあります
public void check(List<String> p)
このメソッドを別のコードから呼び出すと、コンパイラーは、メソッドをチェックするための引数はList<String>
、他には何もないように強制します。
checkメソッドはjar(.classファイル)に存在するためList<String>
、.classファイルの作成時にTYPE情報がすでに削除されている場合、コンパイラはに必要なTYPE情報をどのように認識しますか?