죄송 합니다만 이미 설명했는데 웹에서 비슷한 스레드를 찾지 못했습니다.호환되지 않는 캐스트에 대한 컴파일러 오류가 없습니다.
오늘 IDE에서 하나의 프로젝트 클래스를 열고 프로젝트가 성공적으로 컴파일되었지만 오류 (빨간색 밑줄)가 표시되었습니다.
public interface DatasourceImplementation<T extends Entity> {
....
}
public interface Datasource<T extends Entity> {
....
}
public interface DsContext {
@Nullable
<T extends Datasource> T get(String name);
}
그리고 지금 우리는이 같은이 메서드를 호출 :
그래서 코드는
DatasourceImplementation dsImpl = getDsContext().get("dsName");
Idea13 나에게 오류 (호환되지 않는 유형) 제공을 - 나는 맞아 생각합니다.
Idea14는 여기에 오류를 표시하지 않습니다.
JDK는 오류없이 컴파일합니다. 슬픈 일입니다.
우리의 프로젝트 구현 클래스에서 A 인터페이스는 항상 B 인터페이스를 구현하지만 (생각하면 Idea14에서는 이것이 정상이라고 말하는 이유를 설명 할 수 있습니다.) 제 생각에는이 동작을 정당화 할 수 없습니다 - 일반적으로 클래스를 만들 수 있기 때문에 A를 구현하고 B를 구현하지 않습니다. 내 코드에서 정적 유형 지정을 원하고 런타임 클래스 캐스트 예외를보고 싶지 않습니다.
여기 누가 잘못 되었나요?
업데이트. 실제 클래스와 스크린 샷을 추가
이것은 정말 흥미 롭습니다. 완전한 단순화 된 프로그램을 볼 수 있습니까? –
@RichardTingle이 4 가지 간단한 클래스의 스크린 샷을 추가했습니다. 충분합니까? – AdamSkywalker
코드를 텍스트로 게시하십시오. 첫 번째 생각 : 당신은'get()'메소드에서 일반적인 타입의 데이터 소스를 사용하고 있습니다. –