诊断Java代码: 持续初始化器错误情势[Java编程]
本文“诊断Java代码: 持续初始化器错误情势[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
您常常会看到代码不是仅仅通过调用构造函数对类举行初始化,它还通过一些紧接着的意在设置各个域的行动对类举行初始化.不幸的是,这样紧接着的行动是错误的高发地带,会带来持续初始化(run-on initialization)范例的错误.
持续初始化
由于各种缘由(大都是糟糕的),您常常会看到这样的类定义,此中的类构造函数并不带有充足的参数来适本地初始化类的全部域.这样的构造函数要求客户机类用几个步骤来对实例举行初始化(设置未被初始化的域的值),而不是用一个构造函数调用就行了.以这样的方法初始化实例是一个易于出错的历程,我把它称为 持续初始化.这个历程产生的各种错误范例有类似的症状和医治办法,所以我们可以将它们通通归入一种称为 持续初始化器错误情势的情势.
比方,考虑以下代码:
清单 1. 一个简单的持续初始化
class RestrictedInt {
public Integer value;
public boolean canTakeZero;
public RestrictedInt(boolean _canTakeZero) {
canTakeZero = _canTakeZero;
}
public void setValue(int _value) throws CantTakeZeroException {
if (_value == 0) {
if (canTakeZero) {
value = new Integer(_value);
}
else {
throw new CantTakeZeroException(this);
}
}
else {
value = new Integer(_value);
}
}
}
class CantTakeZeroException extends Exception {
public RestrictedInt ri;
public CantTakeZeroException(RestrictedInt _ri) {
super("RestrictedInt can't take zero");
ri = _ri;
}
}
class Client {
public static void initialize() throws CantTakeZeroException {
RestrictedInt ri = new RestrictedInt(false);
ri.setValue(0);
}
}
以上是“诊断Java代码: 持续初始化器错误情势[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |