簡體   English   中英

Java泛型作為方法的參數

[英]Java generics as parameters to methods

我有一個關於Java泛型的問題,我似乎找不到答案。 這是我當前的代碼:

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;
    }
}

因此,基本上,我必須定義此類BooksByPrice,該類實現接口ISelect並充當謂詞,以在用作列表實現的類的另一個接口的過濾器方法中使用。 如果書籍的價格介於低價和高價之間,BooksByPrice應該選擇此方法返回true。 BooksByPrice類的整個主體都可能會發生變化,但是該接口必須保留在代碼中。 有沒有辦法在類BooksByPrice中實例化通用類型T,以便它可以使用書籍的方法和字段? 否則,我認為沒有理由將select方法具有泛型作為參數。

謝謝你的幫助。

您需要給T一個上限:

class BookByPrice<T extends Book> implements ISelect<T> {

    ...

    public boolean select(T book) {
        return book.getPrice() >= this.low && book.getPrice() <= this.high;
    }
}

否則用一個具體的類型參數實現ISelect

class BookByPrice implements ISelect<Book> {

    ...

    public boolean select(Book book) {
        return book.getPrice() >= this.low && book.getPrice() <= this.high;
    }
}

使用哪種方法是設計決策,具體取決於BookByPrice是否需要對書籍的不同子類通用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM