有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java反射中捕获特定异常

给定一个具有静态方法的类并引发一些异常

class Foo {
    public static void doThis() throws CannotDoThisException {
        //do something
    }
}

我使用下面的反射来调用doThis方法

public class Bar {
    Class c = Class.forName("Foo");
    Method m = c.getDeclaredMethod("doThis",null);
    try {
        m.invoke(null,null);
    } catch (CannotDoThisException e) {
       //Compiler says this is unreachable block.
    }
}

如何捕获异常CannotDothis异常


共 (1) 个答案

  1. # 1 楼答案

    无法捕获该异常的原因是Method::invokejavadoc)不会抛出它

    如果通过invoke调用的方法抛出任何异常,反射层将捕获它,然后创建并抛出一个InvocationTargetExceptionjavadoc),原始异常作为异常的cause

    所以这就是你需要做的:

    public class Bar {
        Class c = Class.forName("Foo");
        Method m = c.getDeclaredMethod("doThis",null);
        try {
            m.invoke(null,null);
        } catch (InvocationTargetException e) {
           if (e.getCause() instanceof CannotDoThisException) {
               // do something about it
           } else {
               // do something else
               // if the `cause` exception is unchecked you could rethrow it.
           }
        }
    }