문제

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의 제약 조건은 다른 인터페이스를 보지 않고 인터페이스 자체에서만 명확하게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top