如何使用 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
我知道如果 BookFilter
是 static nested class
,下面这行代码将毫无问题地通过编译。
.filter(new Book.BookFilter()::isFiction)
如何使用方法引用从 Book
class 调用 isFiction()
方法?
提前致谢!
您评论的 filter
调用未通过编译的原因是您的 Book
class 没有无参数构造函数。
如果你加进去
public Book() {}
然后
books.stream().filter(new Book().new BookFilter()::isFiction);
将通过编译。
我有以下 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
我知道如果 BookFilter
是 static nested class
,下面这行代码将毫无问题地通过编译。
.filter(new Book.BookFilter()::isFiction)
如何使用方法引用从 Book
class 调用 isFiction()
方法?
提前致谢!
您评论的 filter
调用未通过编译的原因是您的 Book
class 没有无参数构造函数。
如果你加进去
public Book() {}
然后
books.stream().filter(new Book().new BookFilter()::isFiction);
将通过编译。