2

我有一个自动完成适配器,但我收到了这个警告: Unchecked cast: 'java.lang.Object' to '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;

我知道这只是一个警告,我可以抑制它,但我想避免强制转换而不是抑制警告。有谁知道该怎么做?

4

1 回答 1

2

编译器不知道你正在做的转换是否正确和安全。

如果您无法避免强制转换(最好的做法是避免它,但您没有发布足够的代码来提供帮助),那么您可以取消警告,如下所示:

@SuppressWarnings("unchecked")

您可以在方法级别执行此操作,甚至可以对变量本身执行此操作:

@SuppressWarnings("unchecked")
String v = (String) vToCast;

我相信这个问题已经被回答了数百万次了......

于 2016-12-07T08:22:07.467 回答