Java에서 generics에 대한 질문이 있는데 그 대답을 찾을 수 없습니다. 여기에 내 현재 코드 :Java generics를 매개 변수로 사용
interface ISelect<T>{
// a predicate that determines the properties of the given item
public boolean select(T t);
}
class BookByPrice<T> implements ISelect<T> {
int high;
int low;
public BookByPrice(int high, int low) {
this.high = high;
this.low = low;
}
public boolean select(T t) {
return t.getPrice() >= this.low && t.getPrice() <= this.high;
}
}
그래서, 기본적으로, 나는 술어가 역할 클래스의 다른 인터페이스에 필터 방법에 사용되는 같은 인터페이스 Iselect를하고 행위를 구현하는이 클래스 BooksByPrice을 정의해야 목록 구현. BooksByPrice는 책의 가격이 낮은 가격과 높은 가격 사이에있는 경우 true를 반환하는이 메서드를 선택해야합니다. BooksByPrice 클래스의 전체 본문은 변경 될 수 있지만 인터페이스는 코드에 그대로 있어야합니다. BooksByPrice 클래스에서 제네릭 형식 T를 인스턴스화하여 책의 메서드와 필드를 사용할 수있는 방법이 있습니까? 그렇지 않으면 선택 메서드에 매개 변수로 제네릭이있는 이유가 없습니다.
도움 주셔서 감사합니다. 디자인 결정 여부 BookByPrice
필요에 따라
class BookByPrice implements ISelect<Book> {
...
public boolean select(Book book) {
return book.getPrice() >= this.low && book.getPrice() <= this.high;
}
}
접근법 사용하는 것입니다
class BookByPrice<T extends Book> implements ISelect<T> {
...
public boolean select(T book) {
return book.getPrice() >= this.low && book.getPrice() <= this.high;
}
}
을 아니면 구체적인 형식 인수로 ISelect
을 구현 :
이 예제에서는 실제로 'BookByPrice'에 제네릭 매개 변수가 필요하지 않습니다. 단순히 클래스 BookByPrice가 ISelect을 구현한다고 선언 할 수 있습니다. –
Perception