원시 유형은 레거시(제네릭 이전) 코드와 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! } }
Raw Type 사용의 위험
유형 안전성 부족:
예:
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
비인증 경고:
경고를 생성하는 예
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!