raw types were introduced to allow compatibility between legacy (pre-generic) codes and the generics introduced in JDK 5. They allow for gradual transition, but compromise type safety.
Definitions and Features
Raw type:
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado
Compatibility:
Raw type variables can receive any generic object and vice versa.
There is no compile-time type checking, resulting in possible run-time errors.
Code Example
// 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! } }
Risks of Using Raw Types
Lack of Type Safety:
Examples:
strOb = raw; // Perigoso: raw contém Double, mas strOb espera String raw = iOb; // Perigoso: raw agora contém Integer, mas coerção pode falhar
Runtime Exceptions:
There is no way to detect inconsistencies at compile time.
Example:
int i = (Integer) raw.getob(); // Erro porque raw contém Double
Non-Verification Warnings:
Examples that generate warnings
Gen raw = new Gen(new Double(98.6)); // Tipo bruto strOb = raw; // Atribuição insegura
Recommendations
Avoid using raw types:
Example:
Gen<Integer> iOb = new Gen<>(88); // Correto e seguro
Treat legacy code with care:
The above is the detailed content of Raw types and legacy code. For more information, please follow other related articles on the PHP Chinese website!