我目前正在编写一个带有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数组),但这里没有关于输入类型的歧义,这就是为什么这对我来说很奇怪。
答案 0 :(得分:1)
Type...
等同于Type[]
(至少就方法参数声明和方法实现而言)。从这个意义上讲,Type[]...
相当于Type[][]
,它解释了double[]...
如何被视为double[][]
,即它被视为相同的签名。
答案 1 :(得分:0)
对于JVM,varargs(...
)或数组([]
)之间没有区别,它在运行时看到的只是一个数组。