1

次のようなメソッドがあります。

public static <U extends Entity<?, ?>> Http<List<U>> getAllFromServerThreadRun(Integer maxResults, Class<U> clazz) {
        JsonObject o2 = new JsonObject(); // TODO exception chaos im projekt
                                            // überarbeiten
        o2.addProperty("maxResults", maxResults);

        String s;
        Type t;
        try {
            U o = clazz.getConstructor().newInstance();
            s = (String) clazz.getDeclaredMethod("getControllerName").invoke(o);
            t = (Type) clazz.getDeclaredMethod("getListType").invoke(o);
        } catch (IllegalArgumentException e) {
            ExceptionHandler.handle(e);
        } catch (SecurityException e) {
            ExceptionHandler.handle(e);
        } catch (InstantiationException e) {
            ExceptionHandler.handle(e);
        } catch (IllegalAccessException e) {
            ExceptionHandler.handle(e);
        } catch (InvocationTargetException e) {
            ExceptionHandler.handle(e);
        } catch (NoSuchMethodException e) {
            ExceptionHandler.handle(e);
        }
        return new Http<List<U>>(new HttpGet(), s, "getall", t).setParams(o2).queryServer();
    }

現在、私のプロジェクトにはおそらく10個が存在します。

これらの例外を隠してくれる別の Java リフレクション ライブラリはありますか? 私はそれらをどうしたらいいのかわからず、ただ散らかっているだけです。

4

3 に答える 3

4

私は提案します

catch (Exception e) {
            ExceptionHandler.handle(e);
}
于 2013-01-09T22:03:47.993 に答える
2

Java 7 では、各キャッチで複数の例外タイプをキャッチできます。

try {
    // reflection stuff
} catch (IllegalArgumentException |
         SecurityException |
         InstantiationException |
         etc e) {
    ExceptionHandler.handle(e);
}

リフレクション メソッドによってスローされる例外の種類が非常に多いため、そうしたいとお考えのことには同情しますが、そうすることで、バグを隠してしまうcatch (Exception e)ような未チェックの例外を意図的にキャッチする危険性が伴いNullPointerExceptionます。

まだ Java 6 の世界にいるのなら、やめた方がいいと思います。

于 2013-01-09T22:14:39.830 に答える
0

Java 7以降、すべてのリフレクション関連の例外はjava.lang.ReflectiveOperationExceptionを拡張するため、それをキャッチするだけで済みます。

その他の例外(IllegalArgumentExceptionおよびSecurityException)は、チェックされていない例外であり、まったくキャッチしてはなりません。これらのいずれかが発生した場合は、コードにエラーがあります。適切な方法は、例外をキャッチすることではなく、例外の原因となっているコードを修正することです。

具体的には、IllegalArgumentExceptionが発生しないコードを見るだけでわかります。invokeこれは、正しい型ではないオブジェクトを渡した場合にのみ発生するためです。また、メソッドが'呼び出しています。また、SecurityExceptionは、メソッドへのアクセスがまったく許可されていない場合にのみ発生するはずです。

于 2013-01-10T00:02:25.763 に答える