让我们说我有一个名为ApplicationDao的超类和一些继承子类,如UserDao,ProductDao等......
如果我的catch和finally块对于我的所有子类完全相同' CRUD方法,超类(ApplicationDao)可以处理异常而不是子类。这意味着我只需要在超类中编写一个TRY ... CATCH ... FINALLY块,而不是在每个子类中复制它。
如果可能的话,我不知道怎么做,因为每个子类中的方法都有不同的名称(UserDao中的getUsers,productDao中的getProducts等等)所以我就是这样。不直接覆盖超类中的方法。
有关如何在父类中捕获所有子类的异常的任何建议。
答案 0 :(得分:1)
首先,不要给方法赋予不同的名称。接下来,如果您创建Superclass
摘要,并添加一个抽象方法(例如下面的getObjects()
),那么您可以在一个地方捕获具体实现中抛出的Exception
。此外,您为呼叫者提供一个一致的入口点(例如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;
答案 1 :(得分:1)
在ApplicationDao中进行常见处理并让子类调用超类 - 这样你只需编写常见内容的代码一次:
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";
}
}
我会将ApplicationDao抽象化......
答案 2 :(得分:0)
超级班不能处理&#39;子类例外。 子类可以替换/包装超类方法,而不是相反。
但是,您可以将代码重构为多个部分: