1. 모호성 오류란 무엇입니까?
2. 모호함의 예: 삭제 과부하
문제가 있는 코드:
class MyGenClass<T, V> { T ob1; V ob2; // Tentativa de sobrecarga void set(T o) { ob1 = o; } void set(V o) { ob2 = o; } }
오류: 일반 매개변수 T 및 V를 기반으로 set() 메서드를 오버로드하려는 시도는 유효한 것처럼 보이지만 모호성을 유발합니다.
3. 모호한 이유
예:
MyGenClass<String, String> obj = new MyGenClass<>();
여기서 T와 V는 모두 String으로 대체되어 두 버전의 set()이 동일해집니다.
결과:
두 번째 문제: 삭제하면 유형이 객체로 줄어듭니다.
void set(Object o) { // ... }
이렇게 하면 T와 V 사이의 구분이 없어져 오버로딩이 불가능해집니다.
4. 왜 이런 일이 발생하는 걸까요?
5. 해결책: 일반적인 과부하 방지
모호성을 해결하려면 메서드에 다른 이름을 사용하세요.
수정된 예:
class MyGenClass<T, V> { T ob1; V ob2; void setOb1(T o) { ob1 = o; } void setOb2(V o) { ob2 = o; } }
여기서 setOb1()과 setOb2()는 서로 다른 메서드이므로 충돌이 발생하지 않습니다.
6. 결론
이와 같은 모호성은 삭제가 일반 매개변수를 단순 유형(객체)으로 변환하기 때문에 발생합니다.
실수를 방지하려면 다음 방법을 따르십시오.
위 내용은 제네릭의 모호성 오류의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!