삭제란 무엇인가요?
- 삭제는 Java에서 제네릭을 구현하는 데 사용되는 기술로, 이전 버전의 언어와의 역호환성을 보장합니다.
- 컴파일하는 동안 모든 일반 유형 정보는 *제거*(또는 "삭제")됩니다.
2. 삭제 사용 동기
기존 코드와의 호환성:
- Java(JDK 5)에 제네릭을 도입한다고 해서 이전 코드가 무효화되어서는 안 됩니다.
- 일반 코드와 일반 코드가 모두 원활하게 작동하도록 보장하려면 일반 코드 디자인이 필요합니다.
적절한 강제:
- 컴파일러는 지정된 인수와의 유형 호환성을 보장하기 위해 강제를 추가합니다.
- 일반 유형에서 정보 제거:
- 유형 매개변수는 소스 코드에만 존재하고 런타임에는 존재하지 않습니다.
4. 삭제 사례
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getOb() {
return ob;
}
}
로그인 후 복사
- 삭제 후 코드(컴파일러가 코드를 변환하는 방법):
class Gen {
Object ob;
Gen(Object o) {
ob = o;
}
Object getOb() {
return ob;
}
}
로그인 후 복사
참고:
- 유형 매개변수가 객체로 대체되었습니다.
- 생성된 코드에는 일반적인 정보가 없습니다.
5. 삭제의 한계
런타임 시 누락된 유형 정보:
- 제네릭 유형은 소스 코드 메커니즘이며 컴파일 후에는 존재하지 않습니다.
불가능:
- 런타임에 인스턴스의 일반 유형을 가져옵니다.
- 일반 유형의 인스턴스를 직접 생성합니다(예: new T()는 허용되지 않음).
6. 실질적인 효과
삭제 설명:
- 제네릭에 오버로드가 없는 이유: 제네릭 유형만 다른 시그니처가 있는 메서드는 허용되지 않습니다.
- 제네릭에서 기본 유형을 직접 사용할 수 없는 이유는 무엇입니까(예: Gen은 유효하지 않습니다. Gen을 사용해야 합니다).
컴파일 시간 보안:
- 타입 정보가 지워지더라도 컴파일러는 컴파일 중에 타입 호환성을 확인합니다.
7. 결론
- 삭제를 사용하면 이전 버전과의 호환성을 손상시키지 않고 제네릭을 Java에 추가할 수 있습니다.
- 일부 제한에도 불구하고 제네릭은 컴파일 시 유형 안전성을 제공하는 반면 생성된 코드는 이전 버전의 JVM과 호환됩니다.
위 내용은 삭제 부분의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!