问题描述
Consumer<String> con = System.out::println;
但是在我将未绑定的方法引用分配给功能接口的代码下面给出了错误。
Consumer<String> con = PrintStream::println;
错误信息是
"Cannot make a static reference to the non-static method println(String) from the type PrintStream"
帮助我了解这里出了什么问题。
解决方法
方法引用操作符是:
System.out::println;
只能应用于:
-
静态方法的引用
ContainingClass::staticMethodName
-
特定对象的实例方法
containingObject::instanceMethodName
-
特定类型的任意对象的实例方法
ContainingType::methodName
-
构造函数
ClassName::new
欲了解更多信息,请访问 Java Method References
在上述情况下,PrintStream 类将 println 方法声明为非静态方法,因此需要一个实例才能使用方法引用运算符指定,例如:
PrintStream ps = new PrintStream("filename");
Consumer<String> con = ps::println;