我有一个抽象类,它有一个带varargs的构造函数。即使每个构造函数都接受参数,Java编译器似乎也不要求子类调用super()。
public abstract class Parent {
public Parent(String... varargs) {
}
}
public class Child extends Parent {
// I would like this to be a compile error. Child should always call super().
}
如何撰写Parent
以便孩子必须致电super()
?
答案 0 :(得分:4)
varargs方法的目的是允许程序员单独编写每个参数,因此可以预先添加相同类型的必需参数,以确保至少传入一个参数。对于有调用者列表或数组,备用构造函数可以接受Iterable
。
public abstract class Parent2 {
public Parent2(String firstArg, String... varargs) {
}
public Parent2(Iterable<? extends String> args) {
}
}
public class Child2 extends Parent2 {
public Child2() {
super("abc");
}
}
答案 1 :(得分:3)
从docs,传递给接受varargs
参数的方法/构造函数的参数数量可以是 none ,使构造函数作为默认参数减去也是构造函数。
要使用varargs,请按照最后一个参数的类型进行操作 省略号(三个点,...),然后是空格和参数名称。该 然后可以使用任意数量的参数调用方法,包括 无强>
所以你可以把它改成一个数组,
abstract class Parent {
public Parent(String[] varargs) {
}
}
您的子构造函数将被强制显式调用此构造函数。