groovy 代码“(wangwang as Man).shout(10)”抛出 java.lang.NullPointerException

groovy code "(wangwang as Man).shout(10)" throws java.lang.NullPointerException

我是 groovy 的新手。我刚刚写了下面的代码

public interface Man{
    public void say();
    public int shout(int x);
}

def wangwang = {
    println("wangwang!");
    println(it)
}

//(wangwang as Man).say()

(wangwang as Man).shout(10)

我 运行 它在 groovy 控制台中。这是输出

wangwang!
10
Exception thrown

java.lang.NullPointerException
    at com.sun.proxy.$Proxy18.shout(Unknown Source)
    at Man$shout.call(Unknown Source)
    at ConsoleScript10.run(ConsoleScript10:13)

已经打印出“10”了,为什么会抛出异常?

非常有趣的场景,确实如此!我会说那是因为 Groovy 试图将由 println 编辑的 null 值 return 转换为接口定义的 int 。如果您更改 return 方法的类型 shout 使问题消失。

如果你从另一边接近它,问题就会消失 - 如果你将闭包设为 return 一个值,例如

def wangwang = {
   println("wangwang!");
   println(it)
   it
}

或者,如果您尝试 运行 下面的代码可能会让事情变得更清楚

(println (10)).class