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

How to call a non-static method from a non-static class using method reference in Java 8?

我有以下 class:

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 class 的几个对象,现在我想使用方法引用来过滤流。正如下面的代码所示,使用 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)

如何使用方法引用从 Book class 调用 isFiction() 方法?

提前致谢!

您评论的 filter 调用未通过编译的原因是您的 Book class 没有无参数构造函数。

如果你加进去

public Book() {}

然后

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

将通过编译。