ホームページ >Java >&#&チュートリアル >生の型とレガシーコード

生の型とレガシーコード

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 21:03:45975ブラウズ

Tipos brutos e código legado

生の型 は、レガシー (ジェネリック以前) コードと 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

非検証の警告:

  • javac コンパイラは、安全でない方法で使用された raw 型を検出すると警告を生成します。

警告を生成する例

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。