2016-12-07 19 views
0

我有,但我得到這個警告的自動完成適配器: 未選中主演:「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循環。但這只是美化代碼。 –

回答

1

編譯器不知道你所做的演員是否正確和安全。

如果不能避免鑄件(最好的做法是,以避免它,但你沒有足夠的發佈代碼,以幫助),那麼你可以取消此警告,就像這樣:

@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