首页 >Java >java教程 >原始类型和遗留代码

原始类型和遗留代码

Linda Hamilton
Linda Hamilton原创
2025-01-03 21:03:45953浏览

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 编译器在检测到以不安全方式使用的原始类型时会生成警告。

生成警告的示例

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn