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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |