分配未绑定的方法引用时出错

问题描述

下面的代码编译成功,我将绑定的方法引用分配给功能接口。

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;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...