getGenericExceptionTypes和getExceptionTypes的区别



我不理解反射API的方法类中getGenericExceptionTypesgetExceptionTypes方法之间的差异,特别是在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(或其子类型)作为其边界。

相关内容

  • 没有找到相关文章

最新更新