2013-03-07 6 views
2

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을 구현 :

+1

이 예제에서는 실제로 'BookByPrice'에 제네릭 매개 변수가 필요하지 않습니다. 단순히 클래스 BookByPrice가 ISelect 을 구현한다고 선언 할 수 있습니다. – Perception

답변

4

당신은 상한 T을 줄 필요가 책의 다른 하위 클래스에 대한 일반 사항입니다.

+0

둘 중 하나의 솔루션이 다른 솔루션보다 적절합니까? 응답 btw, 문제 해결을 위해 고마워요. –

+0

최근 수정 사항보기 - 명확한 내용이 필요한 경우 알려주십시오. –

+0

우수, 철저한 답변을 주셔서 감사합니다. –