未处理的异常类型SimulationException

时间:2014-04-07 08:19:55

标签: java eclipse

我的问题是,为什么我在调用SimulationExcpetion时仍未获得未处理的异常类型damOverflowed(),而在该方法的接口中未声明该异常类型package asgn1Solution; import asgn1Question.SimulationException; import asgn1Question.Log; import asgn1Question.Actions; public class DamActions implements Actions{ private Integer capacity; private Integer nomRelease; private Integer duration; private Log logging; public DamActions(Integer damCapacity, Integer defaultRelease, Integer jobDuration, WaterLog damLog) { capacity = damCapacity; nomRelease = defaultRelease; duration = jobDuration; logging = damLog; } public boolean levelTooLow() throws SimulationException { if (logging.getEntry(0) < capacity*.25) { return true; } else { return false; } } public boolean damOverflowed() { if (logging.getEntry(0) > capacity) { return true; } else { return false; } } 。 `levelTooLow方法在接口和类中声明,并且很好。如果有帮助,我在底部添加了接口方法。

public boolean levelTooLow() throws SimulationException;
public boolean damOverflowed();

在Actions.java中

{{1}}

1 个答案:

答案 0 :(得分:0)

your other question开始,在您的WaterLog课程中,您宣布了以下方法:

public Integer getEntry(Integer index) throws SimulationException {

    if (thelog.isEmpty() || thelog.size() < index) {
        return null;
    }
    return thelog.get(index);
}

这里要注意的重要一点是方法签名中的 throws SimulationException 子句。这表示任何调用getEntry 的方法必须处理SimulationException 声明可能会抛出*。

*这并非严格来说,如果声明的异常是未经检查的异常(即RuntimeException的衍生物),则您不会被迫处理它,即使你在throws子句中声明它。但是,您收到有关此异常的编译错误表明SimulationException已检查的异常,因此需要处理或声明。

因此,您有三种选择。首先,您可以将getEntry块中的try-catch调用封闭起来,如下所示:

public boolean damOverflowed()  {
    try {
        if (logging.getEntry(0) > capacity) {
            return true;
        } else {
            return false;
        }
    } catch (SimulationException ex) {
        // Do something here
    }
}

或者,您可以声明damOverflowed也可以抛出该异常:

public boolean damOverflowed() throws SimulationException {

最后,由于WaterLog#getEntry(Integer)实际上似乎没有抛出该异常(尽管声明它可以),你的第三个选择是简单地从方法签名中删除声明:

public Integer getEntry(Integer index) {

    if (thelog.isEmpty() || thelog.size() < index) {
        return null;
    }
    return thelog.get(index);
}

我还建议您阅读Oracle的Lesson: Exceptions教程。