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

时间:2016-06-07 14:04:27

标签: java eclipse nullpointerexception null java-8

是否有可能在a上创建方法引用 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
    }
}

1 个答案:

答案 0 :(得分:12)

  

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

它不是,但显然在这方面存在Eclipse中的错误(编辑:自been fixed以来)。根据规范,当您使用JDK的工具时,它会在Runnable fn = test::m;行上的NPE失败。

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

理论:来自JLS §15.13.3

  

首先,如果方法引用表达式以 ExpressionName Primary 开头,则会评估此子表达式。 如果子表达式的计算结果为null,则会引发NullPointerException ,并且方法引用表达式会突然完成。

(我的重点。)