java为什么RuntimeException不能从Throwable分配?
我有一个方法(不幸地)接受Object
实例作为其唯一参数。如果Object
是任何类型的Throwable
(这意味着allExceptions
-选中或未选中,以及allError
),我需要添加不同的逻辑来处理它
public void handle(Object toHandle) {
if(toHandle.getClass().isAssignableFrom(Throwable.class))
handleThrowable(toHandle);
}
当我这样调用这个方法时:
RuntimeException rte = new RuntimeExceptio("Panic!");
handle(rte);
isAssignableFrom
检查返回false,并且handleThrowable
永远不会被调用<为什么
相反,我必须使用:
public void handle(Object toHandle) {
if(toHanlde instanceof Throwable)
handleThrowable(toHandle);
}
正如我所预料的那样,这是有效的。但仍然困惑于为什么isAssignableFrom
不起作用。。。提前谢谢
# 1 楼答案
看看documentation of isAssignableFrom:
因此,您实际上是在检查
toHandle
的类是否是Throwable的超类。这不是你想要的你应该反过来做:
或者简单地使用
instanceof