1
私は以下のクラスを持っている:Java 8でメソッド参照を使用して非静的クラスから非静的メソッドを呼び出す方法
class Book {
private String genre;
public Book(String genre) {this.genre = genre;}
public String getGenre() {return genre;}
public class BookFilter {
public boolean isFiction(Book b) {
return b.getGenre().equals("fiction");
}
}
}
私はbooks
リストにBook
クラスのいくつかのオブジェクトを追加して、今、私はメソッドの参照を使用してストリームをフィルタリングします。下のコードに示すように、lambda expression
を使用するとコードは正常に動作しますが、method reference
を使用するとコンパイルされません。
books.stream()
.filter(b->b.new BookFilter().isFiction(b)) //Works fine
//.filter(new Book().new BookFilter()::isFiction); //Will not compile
私はBookFilter
がstatic nested class
だった場合、次のコード行は問題なくコンパイルを通過することを知っています。
.filter(new Book.BookFilter()::isFiction)
は、どのように私は、メソッドの参照を使用してBook
クラスからisFiction()
メソッドを呼び出していますか?
ありがとうございます!
'.filter(b - > b.getGenre()。equals(" fiction "))'を直接使用しない理由はありますか? @AlexisC。 –
私はそれを使用していますが、私は同じことがメソッド参照を使用して達成できるかどうかを知りたがっていました。 –
あなたの内部の 'BookFilter'クラスを静的にすることができます。なぜなら、あなたが' isFiction'関数にパラメータとして与えた特定のインスタンスブックに結びつける理由がないからですあなたの 'Stream#filter'メソッドにそれを入れてください)。 @AlexisC。 –