Java 超类处理子类异常
假设我有一个名为ApplicationDao的超类和一些继承子类,如UserDao、ProductDao等 如果我的catch和finally块对于所有子类的CRUD方法都完全相同,那么超类(ApplicationDao)是否可以处理异常而不是子类。这意味着我只需要在超类中编写一个TRY…CATCH…FINALLY块,而不是在每个子类中复制它 如果可能的话,我不知道该怎么做,因为每个子类中的方法都有不同的名称(UserDao中的getUsers、productDao中的getProducts等等),所以我不会直接重写超类中的方法Java 超类处理子类异常,java,exception,inheritance,Java,Exception,Inheritance,假设我有一个名为ApplicationDao的超类和一些继承子类,如UserDao、ProductDao等 如果我的catch和finally块对于所有子类的CRUD方法都完全相同,那么超类(ApplicationDao)是否可以处理异常而不是子类。这意味着我只需要在超类中编写一个TRY…CATCH…FINALLY块,而不是在每个子类中复制它 如果可能的话,我不知道该怎么做,因为每个子类中的方法都有不同的名称(UserDao中的getUsers、productDao中的getProducts等等
任何关于如何在父类中捕获所有子类的异常的建议都值得赞赏。首先,不要给方法不同的名称。接下来,如果您将
超类
抽象化,并添加一个抽象方法(例如下面的getObjects()
),那么您可以在一个位置捕获在具体实现中抛出的异常。此外,还可以为调用方提供一个一致的入口点(例如,getValues()
)注意:这会使调试变得困难
public List<T> getValues() {
try {
return getObjects();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("In finally");
}
return null; // <-- there was an Exception. Default return.
}
protected abstract List<T> getObjects()
throws Exception;
public List getValues(){
试一试{
返回getObjects();
}捕获(例外e){
e、 printStackTrace();
}最后{
System.out.println(“最终输入”);
}
返回null;//超类无法“处理”子类异常。
子类可以替换/包装超类方法,而不是相反
但是,您可以将代码重构为多个部分:
执行select语句等常见功能可以
移动到类似executeQuery的方法
这可以在基类中使用
使用此基类方法,只需传递适当的sql查询
用那种方法
在这种情况下,executeQuery方法可以处理如下异常
SQLException并将它们包装到特定于应用程序的文件中
异常(如果可以接受,则以静默方式处理异常)
在ApplicationDao中进行公共处理,并让子类调用super类-这样,您只需为公共内容编写一次代码:
public class ApplicationDao {
public String process() {
try{
// Common processing here
} catch (Exception e) {
//...
return "KO";
}
return "OK";
}
}
public class UserDao extends ApplicationDao {
public String getUser() {
String a = super.process();
// Specific processing here...
return "user";
}
}
我想让应用程序变得抽象…你能给我们提供一个代码吗