簡體   English   中英

未經檢查的轉換編譯器警告java

[英]Unchecked conversion compiler warning java

我收到幾個關於我在一個類中使用泛型的編譯器警告,可以使用一些幫助。 我有以下設置:

Map<EventType, List<? extends Listener>> map;

我有幾種不同的事件類型,對於每一種,我想保留相應的偵聽器類型的列表。 Listener是一個接口,有幾個接口可以擴展它。

稍后我在這張地圖上添加一個List,如:

List<StateListener> list = new LinkedList<StateListener>();
list.add(someStateListener);
map.put(Events.STATE, list);

然后我會收到警告......

List<StateListener> list = map.get(Events.STATE);

用於未經檢查的轉換。

我讀了一些其他帖子,但我沒有看到任何有用的東西。 謝謝你的評論

有沒有保證該List來自何處map.get(Events.STATE)是一個List<StateListener>既然你宣布與該值類型的地圖List<? extends Listener> List<? extends Listener>

你需要施放它,或相應地聲明;

List<? extends Listener> list = map.get(Events.STATE);

無法保證map.get()返回的ListList<StateListener> 編譯器只能保證,無論map.get()返回什么, map.get() List<? extends Listener> List<? extends Listener>


因此,要么將Map聲明為List<Listener>的映射,並處理不知道哪個特定的Listener實現從地圖中出來的對象的限制:

Map<EventType, List<Listener>> map;
List<Listener> list = new LinkedList<Listener>();
list.add(someStateListener);
map.put(Events.STATE, list);
// later...
List<Listener> other = map.get(Events.STATE);

或者在聲明中更具體,並遵守限制:

Map<EventType, List<StateListener>> map;
List<StateListener> list = new LinkedList<StateListener>();
list.add(someStateListener);
map.put(Events.STATE, list);
// later...
List<StateListener> other = map.get(Events.STATE);

暫無
暫無

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

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