[英]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.