모든 모델 클래스에서 특정 update
메서드를 구현하는 응용 프로그램이 있습니다. 이를 위해 나는 abstract class
다음과 같은 선언과 interface
을 만들어 : 하위 클래스 선언 제한
public interface BaseInterface<T>
{
T update(T t);
}
public abstract class BaseClass<T extends BaseClass<T>> implements BaseInterface<T>
{
}
는 따라서 내 모든 모델 클래스가
BaseClass
를 확장합니다. 예를 들어,
Book
클래스 정의는하지만 내 모델 클래스의 선언을 제한 할 수없는 나는 위의 구조를 사용하여
public class Book extends BaseClass<Book>
{
public Book update(Book b)
{
//implementation
}
}
될 것입니다.
class Book extends BaseClass<User>
{
public User update(User u)
{
//implementation
}
}
을 내가 위가를 제한 할 할 올바른 구문 동안 다음 Book
클래스는, 유효한 다음과 같은 선언을 BaseClass<Book>
을 확장하는 예를 들어이 유효하고 요구된다.
기본적으로 내 모델 클래스의 update
메서드는 매개 변수로 자체 클래스의 인스턴스를 가져 와서 자체 클래스의 인스턴스 만 반환하고 나머지는 반환하지 않습니다. BaseClass
를 확장하는 클래스 C
이있는 경우 즉
는 다음의
update
방법은 정확한 서명 C update(C c)
이어야합니다.
또는 다른 말로BaseClass
를 확장하는 클래스 C
가있는 경우, 다음 BaseClass
의 템플릿 매개 변수는 C
자체가 다른 [즉 C extends BaseClass<C>
] 아무것도해야합니다.
어떻게 구현합니까?
참고 :이 여기에 우리가 enum
자체 형식의 인스턴스와 enum
아닌 다른 종류를 취할 compareTo
방법의 정의를 제한 할 수있는 enum
선언
public class Enum<E extends Enum<E>> implements Comparable<E>
{
int compareTo(E e)
{
}
}
다소 유사하다.
미리 감사드립니다.
'BaseInterface'라는 인터페이스를 생성하지 마십시오 하나님의 사랑을 위해, 당신은뿐만 아니라'Zywbxzytdkkenbfd'를 호출 할 수 있습니다하십시오. '업데이트 가능'이라고해야합니다. – Qwerky
나는 나의 질문을 명확하게하기 위해 BaseInterface 인터페이스를 명명했다. 나는 그것을 생산에 사용하지 않을 것이다. –