未选中投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。 任何人都知道该怎么办?

+0

这是不是一个错误,但一个警告。它并不妨碍你编译你的源代码。 – Jesper

+0

它应该是'Filter.FilterResults 结果',然后不需要转换。但是我不知道具体的FilterResults。 –

+0

也可能存在一个'addAll'来代替for循环。但这只是美化代码。 –

编译器不知道你所做的演员是否正确和安全。

如果不能避免铸件(最好的做法是,以避免它,但你没有足够的发布代码,以帮助),那么你可以取消此警告,就像这样:

@SuppressWarnings("unchecked") 

你可以做到这一点的方法级别,甚至变量本身:

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

我敢肯定,这个问题已经回答了数百万次反正...

+0

这可以通过Magd Kudama回答完成,但并不是最佳实践。 如何使用它?: 'String v = String.valueOf(vToCast);' 在您的情况下,甚至建议检查result.cast()是否可用于将结果转换为想要的对象。 – Nico

+0

@Nico如我所说,最好的做法是让'results.values'返回一个'List ',因此完全避免了任何投射。 –

+0

对不起,我从你的陈述中忽略了这一点。确实,最好避免投射,但是我认为这是一个实现的Java对象,他似乎适用于他的自定义对象,可用于FilterResult的函数cast()是执行安全投射的选项。 对不起再次 – Nico