簡體   English   中英

如何創建可以拋出任何異常的通用函數?

[英]How to create general function which can throw any exception?

我有兩個類(結構示例):

public class A {
    protected void doCheck(stuff) throw CommonException, A1Exception{
        if(stuff==1){
            throw new A1Exception(stuff);
        }
        throw new CommonException(stuff);
    }
    public void invokeAstuff(stuff) throw CommonException, A1Exception{
        doCheck(stuff);
    }
}
public class B {
    protected void doCheck(stuff) throw CommonException, B1Exception{
        if(stuff==1){
            throw new B1Exception(stuff);
        }
        throw new CommonException(stuff);
    }
    public void invokeBstuff(stuff, otherStuff) throw CommonException, B1Exception{
        doCheck(stuff);
    }
}

“ doCheck”方法具有相同的邏輯來處理內容,但是每個類可以拋出1個不同的異常:A類為A1Exception,B類為B1Exception

我的問題是:如何編寫將使用通用邏輯實現“ doCheck”的基本類+接受應在某些情況下拋出的異常類? A和B僅應擴展此類。

您可以創建一個將異常聲明為通用類型的通用抽象類,然后創建一個必須在子類中重寫的供應商方法。

public abstract class Checkable<X extends Exception> {

    protected abstract X getException(int stuff);

    protected void doCheck(int stuff) throws CommonException, X {
        if (stuff == 1) {
            throw this.getException(stuff);
        }
        throw new CommonException(stuff);
    }

}

子類如下所示:

public class A extends Checkable<A1Exception> {

    @Override
    protected A1Exception getException(int stuff) {
        return new A1Exception(stuff);
    }

    public void invokeStuff(int stuff) {
        doCheck(stuff);
    }

}

Ideone演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM