我有一个有两个班级的项目。一个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? (我从界面中获取此方法并且不会更改它)
答案 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的