簡體   English   中英

從String className獲取可拋出的類對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM