如何使用Java 8中的方法引用从非静态类调用非静态方法?

时间:2017-11-15 14:33:43

标签: java lambda java-8 method-reference

我有以下课程:

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

我知道如果BookFilterstatic nested class,则以下代码行将通过编译而没有任何问题。

.filter(new Book.BookFilter()::isFiction)

如何使用方法参考从isFiction()类调用Book方法?

提前致谢!

1 个答案:

答案 0 :(得分:4)

您注释的filter调用未通过编译的原因是您的Book类没有无参数构造函数。

如果添加

public Book() {}

然后

books.stream().filter(new Book().new BookFilter()::isFiction);

将通过编译。