java - 如何在不使用 try catch block 的情况下捕获 "throws Exeception"?

标签 java design-patterns try-catch

我有一个实现以下接口(interface)的基类,其上声明的方法抛出基本异常类型Exception

有许多具体的类扩展了基类,我不想在所有这些类中添加 try-catch block 。有没有办法在不添加 try-catch 的情况下处理抛出

界面

public interface IReportFactory {   
    public Object GetDataFromDB(Connection conn,HashMap<String,String> map) throws  Exception;        
    public Object  GetJSONString(HashMap<String,String> map) throws Exception;
}

基类

public abstract class BaseReport implements IReportFactory{        
    public Connection conn;
    public String acctId = FactoryReport.getAcctId();


    ------ I WANT TO CATCH EXCEPTION HERE    ------
    ------ WHICH ACCURS IN OTHER CLASSES WHICH EXTENDS FROM THIS CLASSES -----


}

具体类的示例(有 30 个)

public class GeneralRevenue extends BaseReport {
    private final Logger logger = Logger.getLogger(GeneralRevenue.class);

     public GeneralRevenue(Connection _conn) {  
        this.conn = _conn;
    }

    @Override
    public Object GetJSONString(HashMap<String,String> params) throws Exception {

        //codes 
        return jObj.toString();
    }

    @Override
    public Object GetDataFromDB(Connection conn,HashMap params) throws Exception {

        //codes 
        return RevenueList;
    }
}

最佳答案

仅仅因为扩展接口(interface)并不意味着必须添加抛出异常,可以将实现类声明为比接口(interface)抛出更少的异常。您只是不能让实现抛出比接口(interface)更广泛的异常。

因此,您可以在不使用 throws 子句的情况下定义方法,例如:

public Object GetJSONString(HashMap<String,String> params) {

如果抛出任何已检查异常,您可以将其作为未检查异常重新抛出。

如果你想捕获子类抛出的异常,你必须重新安排你的代码,以便子类的方法被父类(super class)调用,否则父类(super class)没有机会捕获任何东西。您可能会考虑使用策略是否有意义(这将允许您包装对策略的调用,并可能减少您必须执行的继承量)。

经常发生的事情是,开发人员使用继承作为他们首选的扩展方式,并且(因为我们总是很匆忙)没有太多考虑将关注点分开,结果是代码变得复杂且不灵活。按照不同的责任线将其分解可能有助于降低复杂性,并且可能有助于解决异常抛出的情况,因为不同的部分会更好地集中,并且可能会抛出不太广泛的异常。

关于java - 如何在不使用 try catch block 的情况下捕获 "throws Exeception"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295682/

相关文章:

r - 如有任何错误,停止执行代码

c# - 要求基类的子级从基类调用方法的设计模式

design-patterns - 如何在 Rust 的装饰器模式中使用生命周期说明符?

iphone - Objective-C 中的装饰器模式

java - 为什么这里不需要 return 语句?

java - 初学者处理用户输入时的异常处理

java - 通过 java 运行时使用 pickled python 类

java - 在 Java 中计算数组中的不同值

java - 如何将nestedscrollview动画设置到底部

java - Android Studio 给了我 BuildConfig 错误