Java:当super的参数是vararg时,如何要求子类调用super()

时间:2015-01-18 08:19:25

标签: java

我有一个抽象类,它有一个带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()

2 个答案:

答案 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) {

    }
}

您的子构造函数将被强制显式调用此构造函数。