簡體   English   中英

Java:使用我自己的.equals將該類與該類中的另一個進行比較

[英]Java: Comparing a class with another within that class using a my own .equals

我正在制作一個方法.equals替換使用的equals方法。 它接受一個對象。 我希望它檢查該對象是否等於運行.equals類的類。

我知道我想比較我對該對象的所有私有方法。

有沒有辦法這樣做而不需要另一個私有類來從對象獲取私有變量? 我如何做這個比較平等而不是身份? 我堅持這個。 我必須使用==進行比較嗎?

也在網上看我看到其他人使用遞歸。 如果這是我必須這樣做的方式,你可以向我展示和解釋嗎?

所以我有一個例子

public boolean equals(Object o)
{

這是一個我們稱之為bobtheBuilder的類(我頭腦中要彈出的第一件事)我想檢查對象o是否等於類。 bobTheBuilder有私有對象數組和私有int。 我假設我想檢查這個類的數組和int是否等於對象的數組和int。 首先我知道我需要檢查它是否等於null

private _arrayObject[];

private _integerBob;

public boolean equals(Object o)
{
    boolean result = true;

    if (o == null)
        result = false

    bobTheBuilder compared = (bobTheBuilder) o;

    if(compared.getArray != _arrayObject[] || compared.getInt != _integerBob)
        result == false

    return result
}

我知道平等的檢查不是身份,所以我認為這是錯誤的。 我該怎么做

因此,在類Z中有一個私有數組X和一個int Y.

現在,為了檢查平等而不是縮進,

  1. 首先你應該有setter和getter來設置和返回私有變量的值,例如

public void setArrayX(Object [] arr),public Object [] getArrayX()

2.現在,eqauls方法看起來像,

boolean equals(Object o) {
  if(Arrays.equals(this.getArrayX(),o.getArrayX()) && this.getIntY() == o.getIntY())
   return true;
  return false;
}

改編自Joshua Bloch的Effective Java第2版中的示例:

public boolean equals(Object o) {
  if (o == this) {
    return true;
  }

  if (!(o instanceof BobTheBuilder)) {
    return false:
  }

  BobTheBuilder bob = (BobTheBuilder) o; //guaranteed to succeed

  return Arrays.equals(bob._arrayObject, _arrayObject)
    && bob._integerBob == _integerBob;
}

不要忘記重寫hashCode

書中的文字是指合同列明的equals的方法, Object在這里

我認為檢查課程的最佳方法是通過

someObject.getClass().isInstance(anotherObject)

命令。

這也適用於繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM