2017-04-09 33 views
0

我已經交到了一些代碼來檢查SMS數據,並且存在使用矢量投過濾功能,即現在導致編譯警告:如何在使用帶有對象的矢量時解決「未選中的投射」?

Unchecked cast: 'java.lang.Object' to 'java.util.Vector<xxx.Event>'

在此位置:

values = (Vector<Event>) results.values; 
           ^
required: Vector<Event> 
found: Object 

的代碼片段如下:

@Override 
public Filter getFilter() { 
    return new Filter() { 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if (results.count != 0) { 
       values = (Vector<Event>) results.values; 
       notifyDataSetChanged(); 
      } 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence smsType) { 
      FilterResults results = new FilterResults(); 
      Vector<Event> eventList = new Vector<>(); 

      if (smsType.equals("ALL")) { 
       results.values = allEvents; 
       results.count = allEvents.size(); 
       return results; 
      } 
      for (Event event : allEvents) { 
       if (event.getType().toString().equals(smsType)) { 
        eventList.add(event); 
       } 
      } 
      results.values = eventList; 
      results.count = eventList.size(); 
      return results; 
     } 
    }; 
} 

我已經在不同的SO解決方案環顧四周,如: thisthisthisthisthisthis。但我必須承認,他們只會造成更多的困惑。

此外,還有一些建議使用ArrayList而不是Vector,但與ArrayLists不同,該矢量的優點是​​。我不知道這是否重要。

而且沒有,我不想@SuppressWarnings,而是試着去理解和解決乾淨利落地使用Java 8.問題

+0

可能的重複:http://stackoverflow.com/questions/14642985/type-safety-unchecked-cast-from-object-to-listmyobject –

+0

@VeneetReddy感謝您添加到已經很長的混淆列表! :) – not2qubit

回答

0

java.util.Vector不應該在所有的被使用,因爲它已經過時了十九年份。它帶有我們不需要的非集合cruft。如果需要併發性,請使用同步或併發列表。從工具箱中移除Vector(和Hashtable)。

(Vector<Event>)和其他通用轉換總是會被取消選中,因爲通用類型不可確定。您需要一個運行時類型令牌,類型爲Class<T>的對象,並使用其cast方法進行通用轉換,但它可能更容易克服「我不想@SuppressWarnings」偏執,並正確使用該註釋,如文檔所述在Joshua Bloch的Effective Java中。

相關問題