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
我是 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