[英]Get throwable class object from String className
给定一个像com.abc.XYZException
这样的字符串,我想得到一个可抛出的类,可以从类路径中解析该字符串作为类名。
private Class<? extends Throwable> getExceptionClass(String className){
return Class.forName(className);
}
这个片段无法编译,因为Class.forName(className)
返回Class<?>
但是Class<? extends Throwable>
Class<? extends Throwable>
是必需的。 如何返回Class<? extends Throwable>
Class<? extends Throwable>
?
未经检查的演员阵容是不可避免的,但你可以通过在投票之前检查输入是否符合来做更安全的事情。
事实上,你可以使用isAssignableFrom()
的方法Class
来检查Class
加载实例是一个子类Throwable
类。
public Class<? extends Throwable> getExceptionClass(String className) {
try {
Class<?> clazz = Class.forName(className);
if (!Throwable.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException("error in the provided classname");
}
return (Class<? extends Throwable>) clazz;
} catch (ClassNotFoundException e) {
// handling the exception
}
}
正如评论中所建议的(未经检查的返回类的强制转换),这应该是你需要的,以便让它被编译:
private Class<? extends Throwable> getExceptionClass(String className) throws ClassNotFoundException {
return (Class<? extends Throwable>) Class.forName(className);
}
这应该可以解决问题;
private Class<? extends Throwable> getExceptionClass(String className) throws ClassNotFoundException{
return (Class<? extends Throwable>) Class.forName(className);
}
或者没有类强制转换,您可以使用通配符返回任何类类型:
private Class<?> getExceptionClass(String className) throws ClassNotFoundException{
return Class.forName(className);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.