我有这样的方法。
void method(int[] ...x){}
然后我使用method(new int[]{1,2,3,4});
调用方法
没关系。但是编译器也会编译这种2d数组类型。
method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});
我想知道原因。 方法具有一维数组类型引用。但是编译器接受2d数组类型。
答案 0 :(得分:5)
可变参数方法
function(Object... args)
的基础类型为function(Object[] args)
因此Object...
只是Object[]
的语法糖。
因此,在您使用1D数组作为参数的情况下,方法void method(int[] ...x){}
应该读为以2D数组作为参数的void method(int[][] x){}
。
因此它可以编译,也不会出现运行时错误。
答案 1 :(得分:3)
简单:因为类型Whatever[] varargs
与<?xml version="1.0" encoding="utf_8"?>
<available_technologies>
<available_technology>
<Opportunity_type>
<item><value>Licensing</value></item>
<item><value>Distribution</value></item>
</Opportunity_type>
</available_technology>
enter code here
</available_technologies>
几乎相同。期望编译器在调用该方法的地方为您做一些魔术(例如为您创建所需的数组对象)。
换句话说:您声明了一个int的varargs数组,从本质上讲,它不过是一个int的数组。
除此之外:请勿这样做。 不要使用可变参数数组。