这是原始的异常代码
public class NoValueForParametarException extends Exception {
private Exception nestedException;
private int errorCode;
public NoValueForParametarException(String message) {
super(message);
}
public NoValueForParametarException(Exception ex,String message) {
super(message);
this.nestedException = ex;
}
public NoValueForParametarException(String message, int errorCode) {
super(message);
this.setErrorCode(errorCode);
}
public Exception getNestedException() {
return this.nestedException;
}
public void setNestedException(Exception nestedException) {
this.nestedException = nestedException;
}
public int getErrorCode() {
return this.errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public String toString() {
StringBuffer errorMsg = new StringBuffer();
errorMsg.append("[" + super.getMessage() + "]:");
errorMsg.append((this.nestedException != null) ? ("\n[Nested exception]:" + this.nestedException):"");
return errorMsg.toString();
}
}
这是新的
public class NoValueForParametarWebServiceException extends NoValueForParametarException {
public NoValueForParametarWebServiceException(String message) {
super(message);
}
public NoValueForParametarWebServiceException(Exception ex,String message) {
super(message);
this.setNestedException(ex);
}
public NoValueForParametarWebServiceException(String message, int errorCode) {
super(message);
this.setErrorCode(errorCode);
}
public String toString() {
StringBuffer errorMsg = new StringBuffer();
errorMsg.append(super.getMessage());
errorMsg.append((this.getNestedException() != null) ? ("\n[Nested exception]:" + this.getNestedException()):"");
return errorMsg.toString();
}
}
我需要的是更改toString()
方法的部分,而不是errorMsg.append("[" + super.getMessage() + "]:");
我有errorMsg.append(super.getMessage());
。当在方法中抛出原始文件时会出现问题,因为设置为NoValueForParametarWebServiceException
的catch块不会捕获原始文件。我知道我可以抓住原版并重新抛出新版本(这也很令人满意),但我想知道是否还有其他方法。
编辑:看来我需要的是不清楚的,所以要更清楚:
该程序抛出NoValueForParametarException
。我想抓住它,但使用toString()
的{{1}}方法(这是创建新类的唯一原因),因为我需要新版本的输出格式而不更改旧版本。
答案 0 :(得分:1)
我认为没有任何理由继承您的第一个例外。此外,如果你摆脱了nestedException实例变量并使用java.lang.Throwable的原因,你不必乱用重写toString,你可以删除大部分代码。
答案 1 :(得分:0)
在某种方法中出现问题 因为原来被扔了 catch块设置为 'NoValueForParametarWebServiceException' 没有赶上原来的。我知道我 可以捕捉原始和公正 重新抛出新的(也会 满意)
您不需要重新抛出子异常。 在这种情况下,只需捕获父异常。
try{
//your code
}catch(NoValueForParametarException e){
//whatever handling you need to do. suppose you call toString() method
System.out.println(e.toString());
}
在上面的情况下,如果抛出任何异常,将执行catch块 (NoValueForParametarException或NoValueForParametarWebServiceException)。
根据抛出的异常,将调用其toString()方法。 (简单继承规则)即
一些与例外相关的教程:
http://download.oracle.com/javase/tutorial/essential/exceptions/index.html
http://tutorials.jenkov.com/java-exception-handling/index.html
希望这有帮助。