我有一个列出自定义对象(假设是MyObject
)的ListView。
我想通过一个EditText
动态过滤它,所以我必须用一个publishResults方法实现一个getFilter()
:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
MyObjectAdapter.this.setItems((List<MyObject>) results.values);
MyObjectAdapter.this.notifyDataSetChanged();
}
在这一点上,Eclipse抱怨:Type safety: Unchecked cast from Object to List<MyObject>
我相信这种说法永远是正确的,但Eclipse只建议添加@SuppressWarnings("unchecked")
,但我完全反对SuppressWarnings
,因为它只是隐藏了问题,而不是解决方案……
我尝试添加:
if(results.values instanceof List<MyObject>)
但是Eclipse再次抱怨,这解决不了任何问题...
Cannot perform instanceof check against parameterized type List<MyObject>. Use the form List<?>
我知道类型转换总是正确的,但是哪种方法才是确保results.values
实际上是List<MyObject>
的正确方法呢?
提前感谢!
发布于 2013-02-01 18:34:14
尝试如下所示:
List<?> result = (List<?>) results.values;
for (Object object : result) {
if (object instanceof MyObject) {
tempList.add((MyObject) object); // <-- add to temp
}
}
filteredItems = tempList; // <-- set filtered
发布于 2013-02-01 17:37:07
您可以在将其传递给setItems()
之前执行检查。
final Object myListObj = reuslts.values;
if(myListObj instanceof List<?>) {
if(((List<?>)myListObj).get(0) instanceof MyObject)
// You can safely suppress the warning here because you made sure it is a List containing MyObject
MyObjectAdapter.this.setItems((List<? extends MyObject>) myListObj);
}
但是,您需要相应地更改您的setItems()
方法:
public void setItems(List<? extends MyObject> list) {
// Your code here
}
https://stackoverflow.com/questions/14642985
复制相似问题