如何解决在使用带有Object的Vector时出现的"Unchecked cast"问题?
如何解决在使用带有Object的Vector时出现的"Unchecked cast"问题?
我被交付了一些代码来检查短信数据,其中有一个使用向量转换的过滤函数,现在导致编译警告:
未经检查的转换:'java.lang.Object' 到 'java.util.Vector
在此位置:
values = (Vector) results.values; ^ 所需类型:Vector 找到类型:Object
代码片段如下:
@Override public Filter getFilter() { return new Filter() { @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results.count != 0) { values = (Vector) results.values; notifyDataSetChanged(); } } @Override protected FilterResults performFiltering(CharSequence smsType) { FilterResults results = new FilterResults(); Vector 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解决方案,例如:
这个,
这个,
这个,
这个,
这个和
这个。
但我必须承认它们只会导致更多的困惑。
此外,有一些建议使用ArrayList而不是Vector,但Vector有一个优点,就是与ArrayList不同,它是同步的。我不知道这在这里是否重要。
而且,不,我不想使用@SuppressWarnings
,而是希望尝试使用Java 8来理解和解决问题。
问题的原因是使用了过时的Vector类,并且对其进行了泛型转换,导致出现了"Unchecked cast"警告。解决方法是使用同步或并发列表来替代Vector类,并使用Class
Java中的Vector类自19年前就已经过时,不应再使用。它包含了我们不需要的非集合内容。如果需要并发性,请使用一个同步或并发列表来替代Vector类(和Hashtable类),将它们从工具箱中淘汰。
对于(Vector