2013-04-09 2 views

답변

1

먼저 우리는 Oracle's documentation에서 자바에서 일반

자바 5에 추가 된 중요한 기능 중 하나입니다 일반 무엇 ,

설명 :

제네릭 자바에 소개되었다 더 엄격한 유형을 제공하는 언어 은 컴파일 타임에 검사하고 일반 프로그래밍을 지원합니다. 유형 매개 변수를 억제 할 경우 자신의 경계 또는 객체와 제네릭 형식의 모든 유형 매개 변수를 교체

  • : 제네릭을 구현하기 위해, 자바 컴파일러에 형의 삭제를 적용합니다. 따라서 생성 된 바이트 코드 에는 일반 클래스, 인터페이스 및 메서드 만 포함됩니다.

  • 유형 안전을 유지하기 위해 필요한 경우 삽입하십시오.

  • 확장 된 제네릭 형식에서 다형성을 보존하기 위해 브리지 메서드를 생성합니다.

유형의 삭제는 새로운 클래스가 매개 변수 유형에 대해 생성되지 않도록 보장; 결과적으로 제네릭은 런타임 오버 헤드를 발생시키지 않습니다.

지금 방법이 링크의 도움으로, 런타임에 제네릭 형식을 얻을 수 있도록하는

읽기 : http://www.west-wind.com/weblog/posts/2011/Nov/11/Dynamically-creating-a-Generic-Type-at-Runtime

3

type erasure으로 인해 일반 개체 인스턴스의 실제 형식 매개 변수를 확인할 수 없습니다. 당신이 할 수있는 최선의 방법은 실제 객체를 알아야하는 코드에 클래스 객체를 전달할 수 있도록 설정하는 것입니다. 예를 들어, 다음은 java.util.EnumMap이 해당 생성자 중 하나에서 수행하는 작업입니다.

3

List<T>T 자바 type erasure를 사용하기 때문에 (예를 들면), 당신이 할 수없는 것을 의미합니다. 런타임에 일 경우 List<T>List처럼 보입니다. 익명 클래스의 가장자리 경우를 제외하고는 사실입니다. jump through hoops을 사용하면 매개 변수 유형을 찾을 수 있습니다. 그러나 일반적인 경우에는 할 수 없습니다. 일반적으로 해당 정보를 별도로 전달해야합니다.

1

런타임에 "Generics"의 개체 유형을 가져올 수 없습니다. object.getclass()를 사용하면 클래스 이름을 가진 클래스의 객체를 얻을 수 있습니다.

관련 문제