我有一個配接器,其中有兩個串列,一個串列用于 InvestorsList,其中包含投資者串列,另一個串列稱為 InvestorListFull,用于在搜索時過濾結果。
以下是我如何宣告串列
List<Investor> investorList;
List<Investor> investorListFull;
下面是如何在我的 recyclerview 配接器建構式中分配串列
public InvestorsAdapter(Context context, List<Investor> investorList) {
this.context = context;
this.investorList = investorList;
investorListFull = new ArrayList<>(investorList);
}
以下是我如何過濾投資者名單中的結果
public Filter getInvestorFilter() {
return investorFilter;
}
private final Filter investorFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Investor> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(investorListFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Investor investor : investorListFull) {
if (investor.getUsername().toLowerCase().contains(filterPattern)) {
filteredList.add(investor);
}
if (investor.getDateJoined().toLowerCase().contains(filterPattern)) {
filteredList.add(investor);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults filterResults) {
investorList.clear();
investorList.addAll((List) filterResults.values);
notifyDataSetChanged();
}
};
我在發布結果中遇到 Unchecked assignment 錯誤 InvestorList.addAll((List) filterResults.values);
uj5u.com熱心網友回復:
我在發布結果中遇到 Unchecked cast 錯誤 InvestorList.addAll((List) filterResults.values);
那是因為你在做一個未經檢查的演員。實際上,您在那里進行了檢查和未檢查的演員表。
(List) filterResults.values是一個檢查演員。這意味著 Java 編譯器會checkcast在位元組碼中插入一條指令,以確保filterResults.values(an Object) 確實是List.
但是,investorList.addAll期望 a List<Investor>,而不是 a List。List是原始型別。您可以將原始型別傳遞給List需要List<Something>;的方法。但這被標記為不安全,因為編譯器無法保證它確實是一個List<Something>-由于型別擦除,沒有任何內容List使它成為“串列Something”。編譯器可以插入一條checkcast指令以確保它是一個List; 但不能確保它是一個List<Something>:這個事實是未經檢查的。
警告中說的是“這里可能有問題;我只是無法證明這是錯誤的”。如果您確定 - 通過構造 - 這filterResults.values 確實是a List<Investor>,那么將其轉換List<Investor>為安全的。
你應該把這一行寫成:
investorList.addAll((List<Investor>) filterResults.values);
請注意,這仍然會給你一個未經檢查的強制轉換警告,因為它仍然是一個未經檢查的強制轉換——你也只是避免使用原始型別。
如果您有信心抑制警告,請宣告一個變數,這樣您就可以專門針對該變數抑制警告,而不必將抑制添加到方法或類中;并記錄為什么在那里壓制是安全的:
@SuppressWarnings("unchecked") // Safe because <reason>
List<Investor> listOfInvestors = (List<Investor>) filterResults.values;
investorList.addAll(listOfInvestors);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/346528.html
