我有一個簡單的界面傳播從一個泛型方法的異常沒有拋出聲明
public interface Func<I, O> {
public O apply(I i);
}
我有一類和一幫實現像這樣
import org.json.*;
public static class Baz {
public static B Qux(String jsonSource) throws JSONException {
JSONObject m = new JSONObject(jsonSource);
return new Baz.Foo().apply(m);
}
private static class Foo implements Func<JSONObject, B> {
public B apply(JSONObject f) {
JSONObject x = f.getJSONObject("bar");
/* Whatever other code in here */
return new B(); /* Place-holder */
}
}
}
該接口專用(靜態)班
由於幾乎任何對JSONObjects的操作都需要捕獲JSONException
,編譯器會在JSONObject x = f.getJSONObject("bar");
處抱怨未捕獲和未聲明的異常。以爲我能簡單地用那隻特別是在try-catch
申請,並重新拋出異常給調用者,我試了一下,如下:
private static class Foo implements Func<JSONObject, B> {
public B apply(JSONObject f) {
try {
JSONObject x = f.getJSONObject("bar");
/* Whatever other code in here */
return new B(); /* Place-holder */
catch (JSONException e) {
throw e;
}
}
}
有了這個然而,我現在得到error: unreported exception JSONException; must be caught or declared to be thrown
在throw e;
指向。
我不明白爲什麼這不起作用。正如預期的那樣,進一步將電話打到apply
沒有任何新意。
我的問題是:
- 爲什麼不這項工作?
- 我該如何解決?
我相信一個解決方法是讓我的接口接受一個異常類型。我不確定這個語法是否可行,但我想我可以沿着
public interface FuncEx<I, O, E> {
public O apply(I i) throws E;
}
這樣的行做些事情有沒有更好的方法?我不認爲我必須創建一個全新的界面來加強這一點。
優秀的文章,感謝分享。 – arin 2013-03-07 15:27:22