고급 Java 제네릭 질문 : 중복 정보를 지정 해야하는 이유
문제
JPA 모델 pojo에 대한 일반적인 클래스가 있습니다.
public interface Identifiable<PK extends Serializable> {
PK getUniqueId();
}
public interface GenericDao<T extends Identifiable<PK>> {
public T findById(PK id);
}
이 코드는 컴파일되지 않습니다. 이것이 작동하려면 지정해야합니다
public interface GenericDao<T extends Identifiable<PK>, PK extends Serializable>
그러나 그것은 중복 정보입니다 !! t가 식별 가능한 인스턴스에 대해 PK 유형이 지정 될 것이며 이것이 DAO의 PK에 사용하기에 사용되는 유형임을 암시합니다.
중복 정보 없이이 작업을 어떻게 만들 수 있습니까?
감사합니다, 프레드
편집하다: 단순화 된 예
해결책
시도 했습니까?
public interface WatchableDao<T extends Watchable<?>>
(즉, 그것은 a입니다 Watchable<Something>
그러나 나는 무엇을 상관하지 않습니다 Something
이다)
나는 그것을 시도하지 않았지만 갈 가치가 있습니다.
편집 : 질문 후 편집, 인터페이스의 유형 매개 변수로 PK가 실제로 필요한 것 같습니다. 이 경우, 나는 당신이 할 때 제약을 효과적으로 반복해야한다고 생각합니다. 예, 중복이지만 언어가 무엇을 지정 해야하는지보다 간단하다고 생각합니다. 효과적인 다른 곳에서 유형 인수로 사용하는 것에 따라 PK에 제약이 적용됩니다. 위로라면 C#에서도 마찬가지입니다.
또한 PK의 제약 조건은 다른 인터페이스를 보지 않고 인터페이스 자체에서만 명확하게 만듭니다.
제휴하지 않습니다 StackOverflow