[英]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);
用於未經檢查的轉換。
我讀了一些其他帖子,但我沒有看到任何有用的東西。 謝謝你的評論
Win的有效Java: http : //books.google.com/books?id=ka2VUBqHiWkC&pg=PA142&lpg=PA142&dq=consider+type+safe+heterogeneous+containers&source=bl&ots=yYDnLlu3P2&sig=Yp3JqYaFwrqHVxAP0OKVVgLAg3Q&hl=en&ei=pdiUTs-1FYTw0gGbqoiJCA&sa=X&oi= book_result&CT =導致&resnum = 2&VED = 0CCAQ6AEwAQ#v = onepage&q&F =假
您必須使用類StateListener作為地圖的鍵。
有沒有保證該List
來自何處map.get(Events.STATE)
是一個List<StateListener>
既然你宣布與該值類型的地圖List<? extends Listener>
List<? extends Listener>
你需要施放它,或相應地聲明;
List<? extends Listener> list = map.get(Events.STATE);
無法保證map.get()
返回的List
是List<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.