Java 获取异常是否为instanceof的复杂方法,无需使用instanceof

Java 获取异常是否为instanceof的复杂方法,无需使用instanceof,java,exception,Java,Exception,我正在编写一个方法,如果异常是*someClass*的实例,该方法将返回true。但我无法导入其中一个类,因为它位于另一个模块中。我无法将该模块添加到项目中,因此我想,我无法使用instanceof 我考虑创建 map > 字符串< -异常的类名,并检查我的异常的类名是否在地图中,但我认为它会相当缓慢和丑陋。 方法如下所示: public boolean checkExceptionClass(Throwable cause){ return (cause instanceof firstE

我正在编写一个方法,如果异常是
*someClass*
的实例,该方法将返回true。但我无法导入其中一个类,因为它位于另一个模块中。我无法将该模块添加到项目中,因此我想,我无法使用instanceof

我考虑创建<代码> map > <代码>字符串< <代码> -异常的类名,并检查我的异常的类名是否在地图中,但我认为它会相当缓慢和丑陋。

方法如下所示:

public boolean checkExceptionClass(Throwable cause){
 return (cause instanceof firstException
         || cause instanceof secondException
         || cause instanceof iDontHaveThatClassException // can't do that
         || cause instanceof fourthException);
}

也许我看不到解决这个问题的好办法。非常感谢您的任何想法和建议。

您可以尝试使用.getClass()和getSimpleName(), 例如:

Integer integer = Integer.valueOf(1);

if(integer.getClass().getSimpleName().equals("Integer") {
 return true
}

因此,基本上您可以使用无法导入的类的名称,值得一提的是,硬编码并不是最佳实践

如何引发项目中甚至没有包含的异常?您为什么要编写这样的方法?这个设计看起来很糟糕。大牛也这么说。异常是否存在于项目中。如果它不存在,那么您就不需要处理它(因为没有它的类,异常就不可能存在)。如果它确实存在,你可以通过名称来引用它。这是一个庞大而复杂的项目,有大量的模块。所有异常(包括丢失的异常)都以
可丢弃的方式包装在其他类中的代码中。我发现它存在于日志中,所以我需要对其进行过滤。从概念上讲,您现在使用的是来自其他模块的信息。如果无法从黑名单切换到白名单,或者从白名单切换到黑名单,则可以在一个公共模块中添加一个或多个标记接口,将该接口添加到其他模块的异常中,并执行一个
导致实例IsLogged
。它消除了检查(外来)类名的魔力。