未选中投prblem
我有,但我得到这个警告的自动完成适配器: 未选中主演:“java.lang.Object继承”到“java.util.ArrayList中的”未选中投prblem
这是我的过滤代码在那里我得到它:
private final Filter nameFilter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
return ((UserNameAndPic) resultValue).getUserName();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (UserNameAndPic people : tempItems) {
if (people.getUserName().toLowerCase().contains(constraint.toString().toLowerCase())) {
suggestions.add(people);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
List<UserNameAndPic> filterList = (List<UserNameAndPic>) results.values;
if (results.count > 0) {
clear();
for (UserNameAndPic people : filterList) {
add(people);
notifyDataSetChanged();
}
}
}
};
它与行的问题:
List<UserNameAndPic> filterList = (ArrayList<UserNameAndPic>) results.values;
我知道它只是一个警告,我可以抑制它,但我想避免铸造,而不是抑制w arning。 任何人都知道该怎么办?
编译器不知道你所做的演员是否正确和安全。
如果不能避免铸件(最好的做法是,以避免它,但你没有足够的发布代码,以帮助),那么你可以取消此警告,就像这样:
@SuppressWarnings("unchecked")
你可以做到这一点的方法级别,甚至变量本身:
@SuppressWarnings("unchecked")
String v = (String) vToCast;
我敢肯定,这个问题已经回答了数百万次反正...
这可以通过Magd Kudama回答完成,但并不是最佳实践。 如何使用它?: 'String v = String.valueOf(vToCast);' 在您的情况下,甚至建议检查result.cast()是否可用于将结果转换为想要的对象。 – Nico
@Nico如我所说,最好的做法是让'results.values'返回一个'List
对不起,我从你的陈述中忽略了这一点。确实,最好避免投射,但是我认为这是一个实现的Java对象,他似乎适用于他的自定义对象,可用于FilterResult的函数cast()是执行安全投射的选项。 对不起再次 – Nico
这是不是一个错误,但一个警告。它并不妨碍你编译你的源代码。 – Jesper
它应该是'Filter.FilterResults结果',然后不需要转换。但是我不知道具体的FilterResults。 –
也可能存在一个'addAll'来代替for循环。但这只是美化代码。 –