亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未經檢查的強制轉換:'java.lang.Class<capture<?>>'

未經檢查的強制轉換:'java.lang.Class<capture<?>>'

HUX布斯 2022-10-26 17:14:54
我正在嘗試在我的超類中編寫以下方法:public <T extends Downloader> T getDownloader(Context context, Integer... positions) throws Exception {     Class<T> mClass = (Class<T>)Class.forName(getDownloaderClassName());     T downloader = mClass.cast(mClass.getConstructors()[0].newInstance(context));         if (downloader != null)         downloader.setPositions(positions);     return downloader;}然而,我不知道如何避免 AndroidStudio 告訴我Unchecked cast: 'java.lang.Class<capture<?>>' to 'java.lang.Class<T>要么我得到它關于第一行,要么,如果我改變Class<T> to Class<?>然后我必須進行直接投射(T)mClass.getConstructors....更準確地說,這個超類是抽象的,getDownloaderClassName()實際上定義如下:public abstract String getDownloaderClassName();這樣子類就可以選擇需要使用 getDownloader() 檢索的 Downloader 的后代。
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

好的,我想我在 T 和 ? 之間感到困惑,所以我找到了一種無警告的方法:


   public Downloader getDownloader(Context context, Integer... positions) throws Exception {


    Class<? extends Downloader> mClass = getDownloaderClassName();

    Downloader downloader = mClass.cast(mClass.getConstructors()[0].newInstance(context));

    if (downloader != null)

        downloader.setPositions(positions);


    return downloader;

}


public abstract Class<? extends Downloader> getDownloaderClassName();

然后,抽象方法就變成了:


@Override

public Class<? extends Downloader> getDownloaderClassName() {

    return DemoDownloader.class;

}

在后代。


我想當我需要特定的字段或方法時,我只需要轉換 getDownloader 的結果。


查看完整回答
反對 回復 2022-10-26
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

簽名public <T extends Downloader> T getDownloader(Context context, Integer... positions)不是類型安全的。它創建getDownloader了一個通用方法,這意味著無論調用者想要什么,它都必須正常工作T,而不知道是T什么。請注意,T不會出現在任何參數類型中。這意味著具有相同確切參數的相同確切調用必須以某種方式返回類型Downloader1,如果這是一個調用者想要的,并且Downloader2如果這是另一個調用者想要的,則還必須返回類型,而該getDownloader方法沒有關于調用者想要什么的任何信息!這顯然是不可能的,除非getDownloader總是返回null。

簽名public Downloader getDownloader(Context context, Integer... positions)不同,因為它表示該getDownloader方法返回 type Downloader。您的getDownloader方法選擇要返回的事物的類型(只要它是 的子類型Downloader);調用者不選擇類型,并且不能對返回的事物做出任何假設,除非它是Downloader. 那是類型安全的。


查看完整回答
反對 回復 2022-10-26
  • 2 回答
  • 0 關注
  • 786 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號