簡體   English   中英

警告:類型安全:未選中從Object到PK的轉換

[英]Warning: Type safety: Unchecked cast from Object to PK

如何從“ id = (PK) m.invoke(obj, (Object []) null); ”中刪除警告

    private PK getId(T obj) {
    PK id = null;
    for (Field f : type.getDeclaredFields()) {
        if (f.getAnnotation(Id.class) != null) {
            String name = f.getName();
            String method = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
            try {
                Method m = type.getDeclaredMethod(method, (Class<?>) null);
                id = (PK) m.invoke(obj, (Object []) null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return id;
}

我假設PK是您課堂上的通用類型

class MyClass<PK> {

由於清除了Java類型,因此PK類型在運行時不可用。 但是,如果您在構造函數中接受Class<PK>實例,則可以通過調用klass.cast(...)來解決此問題klass.cast(...)

class MyClass<PK> {
    private final Class<PK> keyClass;
    MyClass(Class<PK> keyClass) {
         this.keyClass = keyClass;
    }

    PK getKey() {
        return keyClass.cast(...);
    }
}

如果由於某種原因您無法獲得對PK的實際運行時類型的引用,那么您幾乎沒有辦法,只能禁止警告。

Method#invoke返回一個Object所以只有兩種方法可以消除警告:

  • id聲明為Object
  • 在方法聲明之前添加@SuppressWarnings("unchecked")

@SuppressWarnings("unchecked")

方法聲明之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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