Mag*_*nus 0 java validation constructor abstract superclass
我有两节课.超类:
public abstract class Question(){
public Question(String question, String answer, String... alts){...
}
Run Code Online (Sandbox Code Playgroud)
而子类:
public class StringOptionsQuestion extends Question {
public StringOptionsQuestion(String question, String answer, String... alts){
if (alts.length == 0){throw new IllegalArgumentException();} //The compiler doesn't like this line.
super(question, answer, alts);
}}
Run Code Online (Sandbox Code Playgroud)
我希望我的子类,在它传递给超类的构造函数之前StringOptionsQuestion
验证其长度alts
.但是,我不能这样做.我得到错误"构造函数调用必须是构造函数中的第一个语句".为什么会出现此错误?我怎么能绕过它呢?
正如kocko所说,该super
语句必须是构造函数中的第一个语句.但是,如果你确实真的,在验证之前真的不希望得到超级构造函数(例如因为它会破坏一个不太有用的错误),你可以在评估superconstructor的参数时进行验证:
public class StringOptionsQuestion extends Question {
public StringOptionsQuestion(String question, String answer, String... alts) {
super(question, answer, validateAlternatives(alts));
}
private static String[] validateAlternatives(String[] alternatives) {
if (alternatives.length == 0) {
throw new IllegalArgumentException();
}
return alternatives;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
267 次 |
最近记录: |