2017-04-10 52 views
0

同一點上我有一個這樣的自定義適配器相同的對象:的Java:比較它們具有相同的屬性,但不指向內存中

private List<User> items = new ArrayList<>(); 
private Context context; 
public UserSpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull 
     List<User> objects) { 
    super(context, resource, objects); 

    this.items = objects; 
    this.context = context; 
} 

時,我想找到從獲取目標用戶的位置web api,public int getPosition(@Nullable User item)的結果總是-1。我認爲這是我傳遞給適配器的項目的beacaus不僅與適配器用戶列表相同,儘管每個事物都是相同的,但指向另一個內存點。

那麼如何比較兩個具有相同屬性但實際分離的對象呢?

回答

3

你應該實現一個equals/hashCodeUser對象

+0

感謝equals/hashCode但工作沒有覆蓋的hashCode,只是與equals() – Kenji

+0

@Kenji,它會;但是當重寫equals時,你應該總是重寫hashCode。 – epoch

1

您應該重寫equals/hashCode方法你比較的對象。您可以輕鬆地在課堂內按Alt+Insert並選擇equals() and hashCode()。如果你的類有另一個字段其自定義類型,例如

public class User { 
    ... 
    private Location location; 
    ... 
} 

你必須實現也爲位置

+0

它也很有用。你的意思是位置? – Kenji

+0

@enji,這僅僅是一個例子。我的意思是,如果你有自定義字段類型的類'User'(例如'Location'),並且你沒有在'Location'中實現'equals' /'hashCode',你會得到'User'的不等於對象,即使由於通過引用比較「位置」而導致所有字段都相等。 – dewarder

相關問題