Rumah >Java >javaTutorial >Jenis mentah dan kod warisan

Jenis mentah dan kod warisan

Linda Hamilton
Linda Hamiltonasal
2025-01-03 21:03:45953semak imbas

Tipos brutos e código legado

jenis mentah diperkenalkan untuk membolehkan keserasian antara kod warisan (pra-generik) dan generik yang diperkenalkan dalam JDK 5. Mereka membenarkan peralihan beransur-ansur, tetapi menjejaskan keselamatan jenis.

Takrifan dan Ciri
Jenis mentah:

  • Gunakan kelas generik tanpa menyatakan jenis argumen. Contoh:
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado

Keserasian:

Pembolehubah jenis mentah boleh menerima sebarang objek generik dan begitu juga sebaliknya.
Tiada pemeriksaan jenis masa kompilasi, mengakibatkan kemungkinan ralat masa jalan.

Contoh Kod

// 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!
    }
}

Risiko Menggunakan Jenis Mentah
Kekurangan Keselamatan Jenis:

  • Menetapkan jenis mentah kepada generik atau sebaliknya boleh menyebabkan ralat masa jalan.

Contoh:

strOb = raw; // Perigoso: raw contém Double, mas strOb espera String
raw = iOb; // Perigoso: raw agora contém Integer, mas coerção pode falhar

Pengecualian Masa Jalan:

Tiada cara untuk mengesan ketidakkonsistenan pada masa penyusunan.
Contoh:

int i = (Integer) raw.getob(); // Erro porque raw contém Double

Amaran Bukan Pengesahan:

  • Pengkompil javac menjana amaran apabila ia mengesan jenis mentah yang digunakan dengan cara yang tidak selamat.

Contoh yang menjana amaran

Gen raw = new Gen(new Double(98.6)); // Tipo bruto
strOb = raw; // Atribuição insegura

Pengesyoran
Elakkan menggunakan jenis mentah:

  • Sentiasa gunakan hujah jenis untuk memanfaatkan keselamatan yang ditawarkan oleh generik.

Contoh:

Gen<Integer> iOb = new Gen<>(88); // Correto e seguro

Layani kod warisan dengan berhati-hati:

  • Tambahkan semakan dan ujian yang ketat apabila menyepadukan kod pra-generik dengan generik.

Atas ialah kandungan terperinci Jenis mentah dan kod warisan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn