Java 尽管构造函数需要参数,但我仍然可以在没有参数的情况下调用它
为什么我可以用变量参数调用构造函数而不使用参数Java 尽管构造函数需要参数,但我仍然可以在没有参数的情况下调用它,java,constructor,variadic-functions,Java,Constructor,Variadic Functions,为什么我可以用变量参数调用构造函数而不使用参数 public class DenseVector extends AbstractVector implements Vector { public DenseVector(int n) { .. } public DenseVector(Vector v) { .. } public DenseVector(double... elements) { .. } } AbstractVector根本没有手动提供的构造函数。可
public class DenseVector extends AbstractVector implements Vector {
public DenseVector(int n) { .. }
public DenseVector(Vector v) { .. }
public DenseVector(double... elements) { .. }
}
AbstractVector
根本没有手动提供的构造函数。可变参数可以使用任何数量的参数。不包括在内
如果要一个或多个,可以使用一种常见的(稍微笨拙的)模式
DenseVector v = new DenseVector() // calls DoubleVector(double... elements)
可变参数可接受任意数量的参数。不包括在内 如果要一个或多个,可以使用一种常见的(稍微笨拙的)模式
DenseVector v = new DenseVector() // calls DoubleVector(double... elements)
为什么我可以用变量参数调用构造函数而不使用参数
public class DenseVector extends AbstractVector implements Vector {
public DenseVector(int n) { .. }
public DenseVector(Vector v) { .. }
public DenseVector(double... elements) { .. }
}
您没有默认构造函数(不会生成它),并且vararg构造函数是唯一的选项(它需要[0,n]
AbstractVector
根本没有手动提供的构造函数
这就是为什么您不应该在引用非默认父构造函数的所有构造函数中编写super(…)
为什么我可以用变量参数调用构造函数而不使用参数
public class DenseVector extends AbstractVector implements Vector {
public DenseVector(int n) { .. }
public DenseVector(Vector v) { .. }
public DenseVector(double... elements) { .. }
}
您没有默认构造函数(不会生成它),并且vararg构造函数是唯一的选项(它需要[0,n]
AbstractVector
根本没有手动提供的构造函数
这就是为什么您不应该在引用非默认父构造函数的所有构造函数中编写
super(…)
。可变参数允许函数(您的构造函数)接受任意数量的参数。即使没有提供参数,也可以调用相同的函数。可变参数允许函数(在您的情况下是构造函数)接受任意数量的参数。即使没有提供参数,也可以调用相同的函数。可以使用任意数量的参数调用可变构造函数(包括0)
看一看
可变构造函数可以用任意数量的参数调用(包括0) 看一看
正如Java语言规范所述: 如果所调用的方法是一个变量arity方法
m
,则它必须具有n>0
形式参数。对于某些T
,m的最终形式参数必然具有类型T[]
,并且
m
必须用k≥0实际参数表达式
k≥0,表示可以向该方法传递0个实际参数 正如Java语言规范所述: 如果所调用的方法是一个变量arity方法
m
,则它必须具有n>0
形式参数。对于某些T
,m的最终形式参数必然具有类型T[]
,并且
m
必须用k≥0实际参数表达式
k≥0,表示可以向该方法传递0个实际参数