컴파일러 에러 [Java123]있어서 과부하가 발생 : 두 방법은 동일한 소거 => 자바 제네릭 타입을 소거 도입해야

장면 :

두 파라미터 과부하 함수를 다음과 같이하면

무효 FUNC (지도 <정수, 문자열>지도) {}

무효 FUNC (지도 <정수, 목록 <문자열 >>지도) {}

IDE는 컴파일 오류를보고합니다 : 두 방법 모두 같은 삭제가

 

답변 :

자바 제네릭 컴파일 타임에 유형을 삭제 한 후, 위의 방법이 될 것입니다 때문에

무효 FUNC (지도지도)

 

 

조금 쿼리, 이해하고 마스터하는 데 필요한 몇 가지 개념이있다.

https://www.jianshu.com/p/f9da328c91be

C ++에서 자바 제네릭과 다른 템플릿 : 자바 제네릭은 "유형 삭제", C ++ 템플릿 "일반을 구체화"하는 것입니다 .

  • 삭제를 입력 : 제네릭 형식은 컴파일시 컴파일 된 바이트 코드는 일반적인 정보와 실행, 동일한 제네릭 형식 1 바이트 코드에 대한 모든지도가 포함되어 있지 않습니다 존재한다.
  • 컴파일 및 런타임시 현재 제네릭 형식은, 컴파일러는 자동으로 코드의 각 유형에 대한 제네릭 형식을 생성하고 바이너리 코드로 컴파일 : 일반 구체화.

 

형의 삭제의 특성

(객체로 대체 T)> 원본 타입 - 제네릭 (T) -> 컴파일러 (유형 삭제)
일반 (XXX를 확장?) -> 컴파일러 (유형 삭제) -> 원래 유형 (T은 XXX입니다 대안)
일반 정보 컴파일러 후에 소거하기 위해 원래 형식이 참조 가변 바이트 코드의 특정 유형의 유형.

일반 타입의 소거 제한을 초래

제네릭 형식의 삭제 일반화 감소, 특정 중요한 상황 일반적인 유형은 몇 가지 제한과 함께 사용할 수 없습니다.
 
 

암시 적 타입 변환 런타임 오버 헤드 : 제네릭의 사용, 자바 컴파일러는 자동으로 우리가 C를 기준으로 변환을 입력하기 위해 코드를 생성 ++ 템플릿은 의심 할 여지없이 추가 성능 오버 헤드를 제공합니다.

오버로드 메소드 서명 충돌

클래스는 일반적인 인터페이스의 두 가지 변종을 달성 할 수 없다

 

 

https://blog.csdn.net/abc_12366/article/details/79177328

https://blog.csdn.net/weixin_34121282/article/details/88535522  지도 제네릭

 

추천

출처www.cnblogs.com/cathygx/p/11365253.html