我有以下结构
public class parent {
int value ;
}
public class child extends parent {
int childValue;
public child(){}
public child (int value){
this.childValue = value ; // this line cause ConstructorCallsOverridableMethod warning during object construction
}
}
Run Code Online (Sandbox Code Playgroud)
你能建议如何解决这个错误吗?
Pau*_*gas 16
PMD 规则说:
在构造期间调用可覆盖的方法会导致在不完整构造的对象上调用方法的风险,并且可能难以调试.它可能使子类无法构造其超类或被迫完全复制构造过程本身,失去调用的能力
super().如果默认构造函数包含对可覆盖方法的调用,则子类可能完全不可实例化.请注意,这包括整个控制流图中的方法调用 - 即,如果构造函数Foo()调用bar()调用公共方法的私有方法buz(),则表示存在问题.
例:
public class SeniorClass {
public SeniorClass(){
toString(); //may throw NullPointerException if overridden
}
public String toString(){
return "IAmSeniorClass";
}
}
public class JuniorClass extends SeniorClass {
private String name;
public JuniorClass(){
super(); //Automatic call leads to NullPointerException
name = "JuniorClass";
}
public String toString(){
return name.toUpperCase();
}
}
Run Code Online (Sandbox Code Playgroud)
删除构造函数中对可覆盖方法的任何调用,或将final修改器添加到该方法.
| 归档时间: |
|
| 查看次数: |
7772 次 |
| 最近记录: |