私が知っているように、Javaのジェネリックスの主な目的の1つは、コンパイル時の型の安全性を提供することです。コンパイルされると、コードは問題なく実行されます。コンパイルエラーなしで文字列がリストに割り当てられる
次に、次のコードがコンパイルされているのはなぜですか?
public static void main(String[] args) {
String s = getList();
}
private static <T extends List> T getList() {
return (T)new ArrayList();
}
コンパイルが正常です。タイプセーフなコンパイルはどこですか? getList()
メソッドは、String
クラスとは何も共通しません。
いいえ、非生の型を使用している場合でもコンパイルされます。 –
@MarkusFischer、 私はそれについても考えましたが、コンパイラはStringが最終クラスであり、サブクラスを持つことができないことを認識しています – Andrew
@ MarkusFischer、このコメントを答えに変換する必要があります。私はそれがまさにここで観察される問題だと思う。あなたが言ったように、コンパイラは文字列をfinalと見なさないので、 'MyClass extends String implements List'はコンパイル時に可能です。 – Zabuza