类构造函数不区分args ...和args [] []

时间:2018-03-24 10:40:38

标签: java oop constructor

我目前正在编写一个带有java的线性代数库,受到我的线性代数I& E的启发。学校的II门课程。

我希望我的程序尽可能灵活,因此我的Matrix类将拥有许多可用的构造函数。但是,当我尝试将这两个构造函数放在一起时,Java会抛出编译错误:

public Matrix(double[]... rows) { ... }

public Matrix(double[][] matrix) { ... }

我不明白为什么,因为第一个构造函数会接受任意数量的double[]数组作为args:Matrix matrix = new Matrix(r1, r2, r3... etc)而第二个构造函数只接收一个double[][] arg :Matrix matrix = new Matrix(arr)。我意识到在两个构造函数中我将处理相同的数据结构(一个二维的2D数组),但这里没有关于输入类型的歧义,这就是为什么这对我来说很奇怪。

2 个答案:

答案 0 :(得分:1)

Type...等同于Type[](至少就方法参数声明和方法实现而言)。从这个意义上讲,Type[]...相当于Type[][],它解释了double[]...如何被视为double[][],即它被视为相同的签名。

答案 1 :(得分:0)

对于JVM,varargs(...)或数组([])之间没有区别,它在运行时看到的只是一个数组。

另见https://stackoverflow.com/a/7951397/7468990