被引入遗产(遗传前)代码与引入JDK 5的通用物之间的兼容性。它们启用了渐进的过渡,但是妥协了。 [2 总类型: 使用无需指定类型参数的通用类。 例子:
gen raw = new gen(new double(98.6)); //创建的原油类型
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado
//带有通用支持的gen类
类Gen
将总类型分配给通用类型,反之亦然,可能会导致执行时间错误。
// 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现在包含整数,但是强制可能会失败
在执行时间:中的异常
无法在编译时间中检测不一致。
Javac编译器在检测不安全的总类型时会生成警告。
strOb = raw; // Perigoso: raw contém Double, mas strOb espera String raw = iOb; // Perigoso: raw agora contém Integer, mas coerção pode falhar
gen raw = new gen(new double(98.6)); //总类型 strob = raw; //不安全的分配 [2 避免使用总类型:
始终使用类型参数来享受仿制药提供的安全性。
int i = (Integer) raw.getob(); // Erro porque raw contém Double
[2
通过将预性代码集成到通用代码中来添加严格的检查和测试。免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3