ホームページ >Java >&#&チュートリアル >生の型とレガシーコード
生の型 は、レガシー (ジェネリック以前) コードと JDK 5 で導入されたジェネリックとの互換性を可能にするために導入されました。これらは段階的な移行を可能にしますが、タイプセーフティ.
定義と特徴
生のタイプ:
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado
互換性:
生の型変数は任意の汎用オブジェクトを受け取ることができ、その逆も同様です。
コンパイル時の型チェックがないため、実行時エラーが発生する可能性があります。
コード例
// Classe Gen com suporte a genéricos class Gen<T> { T ob; // Declara um objeto do tipo T Gen(T o) { // Construtor ob = o; } T getob() { // Retorna o objeto ob return ob; } } // Demonstração de tipos brutos class RawDemo { public static void main(String[] args) { // Usando genéricos corretamente Gen<Integer> iOb = new Gen<>(88); Gen<String> strOb = new Gen<>("Generics Test"); // Criando um tipo bruto Gen raw = new Gen(new Double(98.6)); double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos System.out.println("value: " + d); // Erros de tempo de execução com tipos brutos // int i = (Integer) raw.getob(); // Erro de tempo de execução! // Atribuição de tipo bruto para genérico strOb = raw; // Correto, mas perigoso // String str = strOb.getob(); // Erro de tempo de execução! // Atribuição de genérico para tipo bruto raw = iOb; // Correto, mas perigoso // d = (Double) raw.getob(); // Erro de tempo de execução! } }
生の型を使用するリスク
型安全性の欠如:
例:
strOb = raw; // Perigoso: raw contém Double, mas strOb espera String raw = iOb; // Perigoso: raw agora contém Integer, mas coerção pode falhar
実行時例外:
コンパイル時に不整合を検出する方法はありません。
例:
int i = (Integer) raw.getob(); // Erro porque raw contém Double
非検証の警告:
警告を生成する例
Gen raw = new Gen(new Double(98.6)); // Tipo bruto strOb = raw; // Atribuição insegura
おすすめ
生の型の使用は避けてください:
例:
Gen<Integer> iOb = new Gen<>(88); // Correto e seguro
レガシーコードは慎重に扱ってください:
以上が生の型とレガシーコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。