「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 大まかなタイプとレガシーコードを扱うためのヒント

大まかなタイプとレガシーコードを扱うためのヒント

2025-04-17に投稿されました
ブラウズ:785

Tipos brutos e código legado

総型は、レガシー(前世代)コードとJDK 5に導入されたジェネリックとの間の互換性を紹介しました。段階的な遷移を可能にしますが、タイプ

定義と特性 グロスタイプ:

    タイプの引数を指定せずに一般的なクラスを使用します。 例:
gen raw = new gen(new double(98.6)); //作成された原油タイプ
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado

互換性:

総型変数は、任意の一般的なオブジェクトを受信でき、その逆も同様です。

コンピレーション時間にタイプの検証はなく、実行時間にエラーが発生する可能性があります。

コード例

//ジェネリックサポートを備えたgenクラス クラスgen { t ob; //タイプtのオブジェクトを宣言します gen(t o){// constructor ob = o; } t getob(){// obsオブジェクトを返します obを返します。 } } //グロスタイプのデモンストレーション クラスrawdemo { public static void main(string [] args){ //ジェネリックを正しく使用します Gen iob = new gen (88); gen strob = new gen ( "generics test"); //グロスタイプを作成します gen raw = new gen(new double(98.6)); double d =(double)raw.getob(); //動作しますが、タイプの安全性を失います System.out.println( "value:" d); //グロスタイプによる実行時間のエラー // int i =(integer)raw.getob(); //実行時間エラー! //ジェネリックの総型割り当て strob = raw; //正しいですが、危険です // string str = strob.getob(); //実行時間エラー! //一般的な総属性 raw = iob; //正しいですが、危険です // d =(double)raw.getob(); //実行時間エラー! } }
// Classe Gen com suporte a genéricos
class Gen {
    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 iOb = new Gen(88);
        Gen 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; //危険:rawにはダブルが含まれていますが、Strobは文字列を待ちます raw = iob; //危険:rawに整数が含まれるようになりましたが、強制が失敗する可能性があります
// Classe Gen com suporte a genéricos
class Gen {
    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 iOb = new Gen(88);
        Gen 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!
    }
}

実行時間の例外:

編集時間の矛盾を検出する方法はありません。

例:

int i =(integer)raw.getob(); // rawがダブルを含む理由エラー
// Classe Gen com suporte a genéricos
class Gen {
    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 iOb = new Gen(88);
        Gen 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!
    }
}

非検証通知:

    Javacコンパイラは、使用されている粗型を不安定に検出すると警告を生成します。
警告を生成する例


gen raw = new gen(new double(98.6)); //グロスタイプ strob = raw; //不安定な割り当て
// Classe Gen com suporte a genéricos
class Gen {
    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 iOb = new Gen(88);
        Gen 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!
    }
}

推奨 粗いタイプの使用は避けてください:

    は常にタイプの引数を使用して、ジェネリックが提供するセキュリティを享受します。
例:


gen iob = new gen (88); //正しく安全です
// Classe Gen com suporte a genéricos
class Gen {
    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 iOb = new Gen(88);
        Gen 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!
    }
}

レガシーコードを注意深く扱う:

    プレジェネリックと汎用コードを統合して、厳密なチェックとテストを追加します。
リリースステートメント この記事は、https://dev.to/javaparainiciantes/tipos-brutos-e-codigo-legado-3c6m?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3