加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy:相同的参数,不同的结果

发布时间:2020-12-14 16:28:57 所属栏目:大数据 来源:网络整理
导读:在下面的代码中,x.test()返回[1,2]. 所以y = [1,2]. 然而f([1,2])打印1,但f(y)打印2. 我怎么写f(y)所以它打印1? 相反,即使z = y,f(z)也会打印1. def f = { Object... args - println args.size(); };class Test { Object[] test() { return [1,2]; } }def x
在下面的代码中,x.test()返回[1,2].

所以y = [1,2].

然而f([1,2])打印1,但f(y)打印2.

我怎么写f(y)所以它打印1?

相反,即使z = y,f(z)也会打印1.

def f = { Object... args -> println args.size(); };

class Test { Object[] test() { return [1,2]; } }

def x = new Test();
def y = x.test();
def z = [1,2];

f([1,2]); // 1
f(y); // 2
f(z); // 1

解决方法

问题是y和z虽然看起来是相同的,但实际上是不同类型的. y是Object [],而z是ArrayList< Integer>. Groovy以不同方式处理数组和列表,自动将前者强制转换为varargs参数列表,而不是后者.

println y.getClass(); // class [Ljava.lang.Object
println z.getClass(); // class java.util.ArrayList

至于你的问题的解决方案,要么改变你的test()以返回List而不是数组:

class Test { List test() { return [1,2]; } }

将数组传递给f时,手动将数组强制转换为列表:

f(y as List); // 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读