在下面的代码中,x.test()返回[1,2].
所以y = [1,2].
然而f([1,2])打印1,但f(y)打印2.
我怎么写f(y)它打印1?
反过来,f(z)印刷品1,即使z = y.
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
Run Code Online (Sandbox Code Playgroud)
Chr*_*s B 11
问题是,y和z,虽然它们看起来是一样的,实际上是不同的类型.y是一段Object[]时间z了ArrayList<Integer>.Groovy以不同方式处理数组和列表,自动将前者强制转换为varargs参数列表,而不是后者.
println y.getClass(); // class [Ljava.lang.Object
println z.getClass(); // class java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)
至于你的问题的解决方案,要么改变你test()的方式List而不是数组:
class Test { List test() { return [1,2]; } }
Run Code Online (Sandbox Code Playgroud)
将数组传递给时,手动将数组强制转换为列表f:
f(y as List); // 1
Run Code Online (Sandbox Code Playgroud)
y[Ljava.lang.Object是while的实例[1,2]并且z是 的实例ArrayList
数组将size() == 2和ArrayLists 计数作为一个参数,但它们包含两个元素
Groovy 会为您进行一些类型转换;)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |