gpt4 book ai didi

Java - 从一组中查找最具体的异常父类(super class)

转载 作者:行者123 更新时间:2023-12-02 03:10:56 25 4
gpt4 key购买 nike

假设我有一组异常类,例如:

Exception
RuntimeException
IllegalArgumentException
IOException
FileNotFoundException

当给定异常类作为参数时,我想从给定类的最具体的父类(super class)集合中找到该类。因此,如果给出 InvalidKeyException,我想找到 IllegalArgumentException 而不是 Exception 或 RuntimeException。如果给定的类是我的集合,我想返回类本身(提供 IOException 返回 IOException 等)。我怎样才能在Java中做到这一点?每当有一个带有多个 catch 语句的 try block 时,JVM(或编译器)都必须解决这个问题,但我不知道如何在给定集合和参数的情况下做到这一点。

提前非常感谢:)

编辑:澄清。不会抛出异常,我有一个它的实例,作为我的方法的参数提供(我可以肯定地手动抛出它,但我宁愿不这样做,因为这是不优雅/糟糕的性能)

最佳答案

这是一个可以完成您想要的操作的方法(我认为)。请注意,这是非常脆弱的,如果您的继承结构非常复杂,这可能无法让您满意地解析该类型。我真的鼓励您重新思考如何解决这个问题。

public class Dubious
{
static private List<Class<? extends Exception>> types =
Arrays.asList( Exception.class, FileNotFoundException.class,
IOException.class, IllegalArgumentException.class,
RuntimeException.class );

public static void main(String[] args) {
processException( new InvalidKeyException() );
processException( new SocketException() );
processException( new IllegalArgumentException() );
processException( new Exception() );
}

public static void processException( Exception ex ) {
Class<?> exType = ex.getClass();
while( !types.contains( exType ) )
exType = exType.getSuperclass();
System.out.println( exType );
}
}

输出:

run:
class java.lang.Exception
class java.io.IOException
class java.lang.IllegalArgumentException
class java.lang.Exception
BUILD SUCCESSFUL (total time: 0 seconds)

关于Java - 从一组中查找最具体的异常父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com