2016-12-07 20 views
0

私はオートコンプリートアダプタを持っているが、私はこの警告取得しています: 未確認キャスト:「java.util.ArrayListの」未確認のキャストprblem

に「java.lang.Object上位を」これは私のフィルタのコードです私はそれを取得しています。ここで

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; 

を知っていると私はそれを抑制することができますが、私は抑制鋳造を回避しないようにしたいですワットarning。 誰も何をすべきか分かっていますか?

+0

はエラーではないことを...私は確信している

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

この質問はとにかく数百万回に答えてきたが、警告。ソースコードのコンパイルを妨げるものではありません。 – Jesper

+0

これは 'Filter.FilterResults results'であり、キャストを必要としません。しかし、私はその特定のFilterResultsを知らない。 –

+0

forループを置き換える 'addAll'が存在するかもしれません。しかしそれは単にコードを美しくすることです。 –

答えて

1

コンパイラは、実行しているキャストが正しいかどうかを知りません。

あなたはこのように、そしてあなただけの警告を抑制することができます(ベストプラクティスは、それを避けるためだろうが、あなたは助けるために十分なコードを投稿していない)のキャストを避けることができない場合は、次の

@SuppressWarnings("unchecked") 

あなたはメソッドレベルでそれを行うことができ、あるいは変数自体に:、

+0

これは、Magd Kudamaが答えたように行うことができますが、実際にはベストプラクティスではありません。 どうすればいいですか?: 'String v = String.valueOf(vToCast);' あなたのケースでは、 'results.cast()'メソッドを使用して結果をキャストすることが可能かどうかを確認することさえ推奨しますオブジェクトが欲しい。 – Nico

+0

@Nico私が言ったように、ベストプラクティスは実際には 'results.values'が' List 'を返すようにして、キャストをまったく避けることです。 –

+0

申し訳ありません私はあなたの声明からその点を見落としました。確かに、キャストを避けるのが最善ですが、これはカスタムオブジェクトに適用されるように実装されたJavaオブジェクトであるため、FilterResultで使用できる 'cast()'関数は安全なキャストを実行するオプションです。 もう一度申し訳ありません – Nico