我不理解反射API的方法类中getGenericExceptionTypes
和getExceptionTypes
方法之间的差异,特别是在java中不允许创建泛型异常时使用前者…
GenericException<T> extends Throwable{ /// NOT ALLOWED
}
下面是一个例子
public class Example {
public static void main(String[] args) throws Exception {
Method m = Example.class.getMethod("method");
System.out.println(m.getGenericExceptionTypes()[0]);
System.out.println(m.getExceptionTypes()[0]);
}
public static <T extends Throwable> void method() throws T {}
}
打印
T
class java.lang.Throwable
作为Method#getGenericExceptionTypes()
的Javadoc状态
如果异常类型是类型变量或参数化类型,则创建它。
,这就是返回的内容
相似的,
public class Example<T extends Throwable> {
public static void main(String[] args) throws Exception {
Method m = Example.class.getMethod("method");
System.out.println(m.getGenericExceptionTypes()[0]);
System.out.println(m.getExceptionTypes()[0]);
}
public void method() throws T {}
}
将有相同的输出。
因此,虽然您不能创建Throwable
的泛型子类型,但您可以创建一个泛型类型变量,将Throwable
(或其子类型)作为其边界。