簡體   English   中英

從MyAbstractParameter轉換為T時未經檢查的轉換警告

[英]Unchecked cast warning when casting from MyAbstractParameter to T

抱歉,我知道之前曾問過類似的問題,但是沒有一個問題可以解決我當前的問題。

我目前有這樣的事情:

abstract class MyAbstractParameter{ /* Some methods/parameters */ }

class MyParameter extends MyAbstractParameter { /*more methods/parameters*/ }

abstract class MyAbstractClass<T extends MyAbstractParameter> extends Thread{
    private List<MyAbstractParameter> list;
    public MyAbstractClass(List<MyAbstractParameter> list) { this.list = list; }
    public List<MyAbstractParameter> getList() { return list; }

    public void run() {
        for(MyAbstractParameter e : list) {
             doStuffWithList((T) e); // WARNING IS HERE WHEN CASTING! ! !!
        }
    }
    public abstract void doStuff(T element);
}

class MyClass extends MyAbstractClass<MyParameter> {
    public MyClass(List<MyAbstractParameter> list) { super(list); }
    public void doStuff(MyParameter element) { /* does something */ }
}

我希望方法getList()始終返回List<MyAbstractParameter> ,並且確實如此,但是它給了我這個警告,並且我知道背后的原因是,如果我發送MyOtherParameter extends MyAbstractParameter的列表MyOtherParameter extends MyAbstractParameter ,則MyOtherParameter extends MyAbstractParameter會失敗,我會哭。

所以我決定去private List<? extends MyAbstractParameter> list; private List<? extends MyAbstractParameter> list; ,但我必須修改所有內容,以便此<? ...>沒有問題<? ...> <? ...>

因此...在避免修改所有內容的同時還有另一種方法嗎?
我的意思是..喜歡在MyAbstractClassMyAbstractClass ,而不使用@SuppressWarning("unchecked")

如果列表中的每個元素都應該是T的一個實例,則列表應該是List<T>

abstract class MyAbstractClass<T extends MyAbstractParameter> extends Thread {
    private List<T> list;
    public MyAbstractClass(List<T> list) { this.list = list; }
    public List<T> getList() { return list; }

    public void run() {
        for (T e : list) {
             doStuffWithList(e); 
        }
    }
    public abstract void doStuff(T element);
}

暫無
暫無

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

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