【发布时间】:2017-07-23 15:37:39
【问题描述】:
我尝试为我的特定目的编写某种异常处理程序。 我有一个班级清单。比方说:
List<Class<? extends Throwable>> list = new LinkedList<>();
list.add(RuntimeException.class);
list.add(IllegalArgumentException.class);
现在,我想做:
public Class<? extends Throwable> findMostSpecific(Class<? extends Throwable> type) {
for (....) {
if (... WHAT TO PUT HERE ? .... ) {
return ....
}
}
}
这个方法必须找到给定类型的最具体的类。所以如果我通过了:
- IllegalArgumentException,它必须找到 IllegalArgumentException(不是 RTE)。
- RuntimeException,它必须找到RuntimeException
- IllegalStateException,它也必须找到RuntimeException(因为IllegalStateException不在列表中)
- 如果我添加
CustomException extends IllegalArgumentException并传递它,它必须返回IllegalArgumentException(不是RTE并且CustomException不在列表中,所以IllegalArgumentException是最具体的)
那么如何找到给定实例的最具体类型呢?有可能吗?
【问题讨论】:
-
只使用代表类对象。通过
type.class访问它,然后您可以使用Class#getName之类的方法和类似的东西。从那里您还可以检查Class#isInstance(Object o)之类的内容,或者调用方法或使用构造函数创建实例等。这是Java-Doc of Class。请注意,此类对象将始终在 real 类上工作,而不是受限视图。因此,您会直接收到您正在搜索的内容。
标签: java reflection instanceof