groovy代码;(汪汪扮男子汉)喊(10)“;抛出java.lang.NullPointerException

groovy代码;(汪汪扮男子汉)喊(10)“;抛出java.lang.NullPointerException,groovy,Groovy,我是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) 我在groovyConsole中运行它。这是输出 wangwan

我是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)
我在groovyConsole中运行它。这是输出

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
值转换为接口定义的
int
。如果更改方法
shout
的返回类型以使其无效,问题就会消失

如果你从另一边接近它,问题就会消失——如果你关闭它以返回一个值,例如

def wangwang = {
   println("wangwang!");
   println(it)
   it
}
或者,如果您尝试运行下面的代码,可能会使问题更清楚

(println (10)).class