虽然构造函数需要参数,但我仍然可以在没有参数的情

时间:2018-02-09 09:44:23

标签: java constructor variadic-functions

public class DenseVector extends AbstractVector implements Vector {

  public DenseVector(int n) { .. } 

  public DenseVector(Vector v) { .. }

  public DenseVector(double... elements) { .. }

}

为什么我可以在没有参数的情况下调用带有可变参数的构造函数?

DenseVector v = new DenseVector() // calls DoubleVector(double... elements)

AbstractVector根本没有手动提供的构造函数。

5 个答案:

答案 0 :(得分:4)

变量参数采用任意数量的参数。包括没有。

如果您想要一个或多个,则会出现一种常见的(略显笨拙)模式

public DenseVector(double element, double... moreElements)

答案 1 :(得分:1)

  

为什么我可以在没有参数的情况下调用带有可变参数的构造函数?

您没有默认构造函数(它不会被生成),并且vararg构造函数是唯一的选项(它需要[0, n] double - 您没有传递任何内容。

DenseVector v = new DenseVector();

要调用no-arg构造函数(如果是你的意图),你必须先定义它。

  

AbstractVector根本没有手动提供的构造函数

这就是为什么你不应该在引用非默认父构造函数的所有构造函数中编写super(...)

答案 2 :(得分:0)

Variadic参数允许函数(在您的情况下为构造函数)接受任意数量的参数。即使没有提供参数,也可以调用相同的函数。

答案 3 :(得分:0)

可以使用任意数量的args (包括0)调用可变参数构造函数 看一看 Java, 3 dots in parameters

答案 4 :(得分:0)

Java语言规范指出here

如果被调用的方法是变量arity方法m,则它必须具有n > 0形式参数。对于某些mT[]的最终形式参数必须具有T类型 必须使用k 0实际参数表达式调用m

k≥0,表示您可以将0个实际参数传递给该方法。