Heim >Java >javaLernprogramm >Rohtypen und Legacy-Code

Rohtypen und Legacy-Code

Linda Hamilton
Linda HamiltonOriginal
2025-01-03 21:03:451006Durchsuche

Tipos brutos e código legado

Rohtypen wurden eingeführt, um die Kompatibilität zwischen älteren (vorgenerischen) Codes und den in JDK 5 eingeführten Generika zu ermöglichen. Sie ermöglichen einen schrittweisen Übergang, gehen aber Kompromisse ein Typsicherheit.

Definitionen und Funktionen
Rohtyp:

  • Verwenden Sie eine generische Klasse ohne Angabe von Typargumenten. Beispiel:
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado

Kompatibilität:

Variablen vom Rohtyp können jedes generische Objekt empfangen und umgekehrt.
Es findet keine Typprüfung zur Kompilierungszeit statt, was zu möglichen Laufzeitfehlern führen kann.

Codebeispiel

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

Risiken der Verwendung von Rohprodukten
Mangelnde Typensicherheit:

  • Das Zuweisen von Rohtypen zu Generika oder umgekehrt kann zu Laufzeitfehlern führen.

Beispiele:

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

Laufzeitausnahmen:

Es gibt keine Möglichkeit, Inkonsistenzen zur Kompilierungszeit zu erkennen.
Beispiel:

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

Warnungen bei Nichtüberprüfung:

  • Der Javac-Compiler generiert Warnungen, wenn er Rohtypen erkennt, die auf unsichere Weise verwendet werden.

Beispiele, die Warnungen generieren

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

Empfehlungen
Vermeiden Sie die Verwendung von Rohtypen:

  • Verwenden Sie immer Typargumente, um die Sicherheit zu nutzen, die Generika bieten.

Beispiel:

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

Behandeln Sie Legacy-Code mit Sorgfalt:

  • Fügen Sie strenge Prüfungen und Tests hinzu, wenn Sie vorgenerischen Code in generische Codes integrieren.

Das obige ist der detaillierte Inhalt vonRohtypen und Legacy-Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn