Java重新抛出异常

时间:2016-07-20 17:56:14

标签: java

我有一个有两个班级的项目。一个Object类和一个GUI类。 如果发生错误,我想抛出自己声明的Exception。 我有两种方法:

public class getValueClass   {

private List<Value> liste;


public List<Value> getValues() {

    try {
        liste = this.getVal();
    } catch (ValueException ex) {
        System.out.println("EXCEPTION!! " + ex.getMessage());
        ex.printStackTrace();
    } 
    return liste;
}


public List<Value> getVal() throws  ValueException
{
liste = null;
try {

    // initialize list
    // do some stuff


    //test exception
    if(1 == 1)
    {
        throw new Exception();  
    }


} catch (Exception ex) {
    throw new ValueException("QWE " + ex);
} 
return liste;

}
}

现在抛出异常,我在getValues方法中捕获异常并打印消息/堆栈

但我在我的GUI-Class中调用了方法getValues,我想在那里捕获Exception并在我的对话框中打印一些信息!

GUI:

    public void myMethod()
{
try
            {

            l = cs.getValues();

            }
            catch(Exception ex)
            {
                System.out.println("TEST " + ex.getMessage());
            }
            }

但是我没有到达那里因为我已经在getValues()方法中捕获它了。

是否有可能使它成为这样而不在getValues()方法的方法声明中添加throws? (我从界面中获取此方法并且不会更改它)

2 个答案:

答案 0 :(得分:2)

您可以抛出未经检查的RuntimeException,例如IllegalArgumentException或自定义的RuntimeException子类。

public List<Value> getValues() {
    try {
        liste = this.getVal();
    } catch (ValueException ex) {
        throw new IllegalArgumentException(ex.getMessage(), ex);
    } 
    return liste;
}

答案 1 :(得分:1)

有一种方法可以做你想要的,但我建议反对它取决于ValueException的预期目的,因为它可能是未来错误的来源

您可以ValueException延长RuntimeException。顾名思义,RuntimeException异常集在运行时抛出,不在编译时声明,需要明确捕获。这样您就不必向throws方法添加getValues()声明,但仍会在主方法中捕获它。

免责声明解释:

我不喜欢这个想法(以及RuntimeException s)的原因是因为在明确寻找之前它们是未被捕获的。在我看来这并不是易于使用的代码,虽然它有非常方便的用途,但由于它们带来的不确定性,我感觉不正确使用它们

同样,这是我的意见,而不是Java的