2017-04-09 11 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中。

相关问题