在null-reference上创建方法引用不会引发exception

是否有可能在Java中的null引用上创建方法引用? 这样做可能永远不会正确,但可能导致以后很难找到的错误:

 public class Test { void m() { } public static void main(String[] args) { Test test = null; Runnable fn = test::m; // no exception System.out.println(fn); // prints Test$$Lambda$1/791452441@1c20c684 fn.run(); // throws a null pointer exception } } 

是否有可能在Java中的null引用上创建方法引用?

它不是 ,但显然在这方面Eclipse中存在一个错误(编辑: 已经修复 )。 根据规范,当您使用JDK的工具时,它在Runnable fn = test::m;上的NPE失败Runnable fn = test::m; 线。

certificate: http : //ideone.com/APWXna (或使用javacjava而不是Eclipse在本地编译和运行)

理论:来自JLS§15.13.3 :

首先,如果方法引用表达式以ExpressionNamePrimary开头,则计算此子表达式。 如果子表达式求值为null ,则引发NullPointerException ,并且方法引用表达式突然完成。

(我的重点。)