未经检查的转换问题
Unchecked cast prblem
我有一个自动完成适配器,但我收到此警告:
未经检查的转换:'java.lang.Object' 到 'java.util.ArrayList'
这是我在其中获取过滤器的代码:
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;
我知道这只是一个警告,我可以抑制它,但我想避免转换而不是抑制警告。
有人知道怎么办吗?
编译器不知道你所做的转换是否正确和安全。
如果您无法避免转换(最好的做法是避免它,但您没有发布足够的代码来提供帮助),那么您可以取消警告,如下所示:
@SuppressWarnings("unchecked")
您可以在方法级别,甚至是变量本身执行此操作:
@SuppressWarnings("unchecked")
String v = (String) vToCast;
我敢肯定这个问题已经被回答了数百万次了...
我有一个自动完成适配器,但我收到此警告: 未经检查的转换:'java.lang.Object' 到 'java.util.ArrayList'
这是我在其中获取过滤器的代码:
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;
我知道这只是一个警告,我可以抑制它,但我想避免转换而不是抑制警告。 有人知道怎么办吗?
编译器不知道你所做的转换是否正确和安全。
如果您无法避免转换(最好的做法是避免它,但您没有发布足够的代码来提供帮助),那么您可以取消警告,如下所示:
@SuppressWarnings("unchecked")
您可以在方法级别,甚至是变量本身执行此操作:
@SuppressWarnings("unchecked")
String v = (String) vToCast;
我敢肯定这个问题已经被回答了数百万次了...