Java 自定义异常处理错误
我有一个扩展JSONException的自定义异常,我希望我的方法抛出这个异常,而不是在我的方法中使用try-catch 当我使用异常时,IDE仍然警告我处理JSON异常 例外情况Java 自定义异常处理错误,java,exception,Java,Exception,我有一个扩展JSONException的自定义异常,我希望我的方法抛出这个异常,而不是在我的方法中使用try-catch 当我使用异常时,IDE仍然警告我处理JSON异常 例外情况 public class NoBorderException extends JSONException { public NoBorderException(String s) { super(s); } public String getMessage(){
public class NoBorderException extends JSONException {
public NoBorderException(String s) {
super(s);
}
public String getMessage(){
return super.getMessage();
}
}
方法-未处理的JSON异常
private void loadNeighboringCountries(String data) throws NoBorderException {
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
方法-没问题
private void loadNeighboringCountries(String data) throws JSONException{
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
谢谢,
JSONArray
构造函数(实际上还有get
方法)抛出了一个JSONException
。您的方法只声明为抛出一个NoBorderException
,而不是超类,这意味着jsoneexception
保持未处理状态
简而言之,声明抛出NoBorderException
覆盖了NoBorderException
的任何子类,但不包括其超类jsoneexception
如果希望此方法引发自定义异常类型,则需要执行以下操作:
try {
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
}
catch (JSONArray e) {
throw new NoBorderException(e.getMessage());
}
JSONArray
构造函数(实际上是get
方法)抛出一个JSONException
。您的方法只声明为抛出一个NoBorderException
,而不是超类,这意味着jsoneexception
保持未处理状态
简而言之,声明抛出NoBorderException
覆盖了NoBorderException
的任何子类,但不包括其超类jsoneexception
如果希望此方法引发自定义异常类型,则需要执行以下操作:
try {
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
}
catch (JSONArray e) {
throw new NoBorderException(e.getMessage());
}
JSONArray
构造函数(实际上是get
方法)抛出一个JSONException
。您的方法只声明为抛出一个NoBorderException
,而不是超类,这意味着jsoneexception
保持未处理状态
简而言之,声明抛出NoBorderException
覆盖了NoBorderException
的任何子类,但不包括其超类jsoneexception
如果希望此方法引发自定义异常类型,则需要执行以下操作:
try {
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
}
catch (JSONArray e) {
throw new NoBorderException(e.getMessage());
}
JSONArray
构造函数(实际上是get
方法)抛出一个JSONException
。您的方法只声明为抛出一个NoBorderException
,而不是超类,这意味着jsoneexception
保持未处理状态
简而言之,声明抛出NoBorderException
覆盖了NoBorderException
的任何子类,但不包括其超类jsoneexception
如果希望此方法引发自定义异常类型,则需要执行以下操作:
try {
final JSONArray arrBorders = new JSONArray(data);
System.out.print(arrBorders.get(0));
}
catch (JSONArray e) {
throw new NoBorderException(e.getMessage());
}
谢谢你的回复,我知道当我围绕它时,它是工作的,但我还不明白这有什么问题?MyException扩展了JsonException,因此,我假设它应该可以工作??正如我在帖子中提到的:声明
抛出NoBorderException
涵盖了NoBorderException
的任何子类,但不包括其超类JsonException
。好的,谢谢,因此,在JSONexception->Exception和NoBorderException->JSONexception之间没有相同的层次结构。有一个层次结构,但您的理解是错误的。您需要声明方法抛出的最一般的异常类(或者,实际上,声明多个抛出的)。在这种情况下,JSONException
比NoBorderException
更一般,因为它是超类。谢谢你的回复,我知道当我围绕它时它是有效的,但我还不明白这有什么问题?MyException扩展了JsonException,因此,我假设它应该可以工作??正如我在帖子中提到的:声明抛出NoBorderException
涵盖了NoBorderException
的任何子类,但不包括其超类JsonException
。好的,谢谢,因此,在JSONexception->Exception和NoBorderException->JSONexception之间没有相同的层次结构。有一个层次结构,但您的理解是错误的。您需要声明方法抛出的最一般的异常类(或者,实际上,声明多个抛出的)。在这种情况下,JSONException
比NoBorderException
更一般,因为它是超类。谢谢你的回复,我知道当我围绕它时它是有效的,但我还不明白这有什么问题?MyException扩展了JsonException,因此,我假设它应该可以工作??正如我在帖子中提到的:声明抛出NoBorderException
涵盖了NoBorderException
的任何子类,但不包括其超类JsonException
。好的,谢谢,因此,在JSONexception->Exception和NoBorderException->JSONexception之间没有相同的层次结构。有一个层次结构,但您的理解是错误的。您需要声明方法抛出的最一般的异常类(或者,实际上,声明多个抛出的)。在这种情况下,JSONException
比NoBorderException
更一般,因为它是超类。谢谢你的回复,我知道当我围绕它时它是有效的,但我还不明白这有什么问题?MyException扩展了JsonException,因此,我假设它应该可以工作??正如我在帖子中提到的:声明抛出NoBorderException
涵盖了NoBorderException
的任何子类,但不包括其超类JsonException
。好的,谢谢,因此,在JSONexception->Exception和NoBorderException->JSONexception之间没有相同的层次结构。有一个层次结构,但您的理解是错误的。您需要声明方法抛出的最一般的异常类(或者,实际上,声明多个抛出的)。在这种情况下,JSONException
比NoBorderException
更一般,因为它是超类。