找出方法以编程方式抛出的异常

时间:2016-07-09 19:43:26

标签: java reflection

想象一下你有一个方法:

var pxl = Pixel(value: 0xFEEDFACE, red: 0xFE, green: 0xED, blue: 0xFA, alpha: 0xCE)
let redChannel = pxl[.red]
print(redChannel)
pxl[.green] = 0xB5
print(pxl)

有没有办法以编程方式通过反射获取声明的抛出异常?

public void doGreatThings() throws CantDoGreatThingsException, RuntimeException {...}

3 个答案:

答案 0 :(得分:7)

您可以使用getExceptionTypes()方法。你不会得到Exception[],因为这样的数组会期望异常实例,但你会得到Class<?>[],它将保存所有抛出的异常.class

演示:

class Demo{
    private void test() throws IOException, FileAlreadyExistsException{}

    public static void main(java.lang.String[] args) throws Exception {
        Method declaredMethod = Demo.class.getDeclaredMethod("test");
        Class<?>[] exceptionTypes = declaredMethod.getExceptionTypes();
        for (Class<?> exception: exceptionTypes){
            System.out.println(exception);
        }
    }
}

输出:

class java.io.IOException
class java.nio.file.FileAlreadyExistsException

答案 1 :(得分:1)

你可以做反射api。

// First resolve the method
Method method = MyClass.class.getMethod("doGreatThings");
// Retrieve the Exceptions from the method
System.out.println(Arrays.toString(method.getExceptionTypes()));

如果方法需要参数,则需要使用Class.getMethod()调用来提供它们。

答案 2 :(得分:1)

以下是一个例子:

import java.io.IOException;
import java.util.Arrays;

public class Test {

    public void test() throws RuntimeException, IOException {

    }

    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        System.out.println(Arrays.toString(Test.class.getDeclaredMethod("test").getExceptionTypes()));
    }

}