2013-08-29 55 views
4

我需要爲MyClas創建equals函數。是MyClass的對象實例

public class MyClass 
{ 
boolean equals(Object value) 
    { 
    if (... value is type of MyCLass ...) 
     { 
     return= ... check conditions...; 
     } else return false; 
    } 
} 

爲此,我需要知道Object的值是否爲MyClass的類型。如何做到這一點?

+5

也許'instanceof'? – BackSlash

+0

它總是讓我感到震驚,人們關心的足以回答你一個完整的答案,但不認爲這個問題是不夠好的,不能放棄。 +1的好問題 –

+0

[任何理由更喜歡getClass()生成.equals()時的instanceof)?(http://stackoverflow.com/questions/596462/any-reason-to-prefer-getclass-產生時等於) – Raedwald

回答

5

爲了檢查是否value是類型MyClass使用的:

if(value instanceof MyClass) 
+0

不推薦:http://stackoverflow.com/questions/596462/any-reason-to-prefer-getclass-over-instanceof-when-generating-equals – Raedwald

1

instanceof操作符用來確定。這是中綴,因此使用它是這樣的...

(value instanceof MyClass) 
1
public class MyClass 
    { 
     boolean equals(Object value) 
     { 
      if (value instanceof MyCLass) 
      { 
       return= ... check conditions...; 
      } else return false; 
     } 
    } 
1

你可以做

@Override 
public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 

    MyClass myClass = (MyClass) o; 
    //Your logic 

您還可以使用的,而不是instanceof方法getClass()

0
value instanceof ClassName 

instanceof關鍵字檢查,其中value是類名的subclass,如果是reutns真,否則返回false

1

只是一個小把戲IDE。只是爲了節省一些時間。

在eclipse中,您可以通過右鍵單擊類文件並選擇源--->生成hashCode()和equals()方法,選擇需要比較的所有屬性,然後IDE將爲您生成相應的代碼

摘錄

public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Employee other = (Employee) obj; 
     if (firstName == null) { 
      if (other.firstName != null) 
       return false; 
     } else if (!firstName.equals(other.firstName)) 
      return false; 
     if (id != other.id) 
      return false; 
     if (lastName == null) { 
      if (other.lastName != null) 
       return false; 
     } else if (!lastName.equals(other.lastName)) 
      return false; 
     if (salary != other.salary) 
      return false; 
     return true; 
    } 
0

Altough RTTI(實時類型識別)被一些人認爲是一個代碼味道,有兩個選擇,一個是使用instanceof操作:

if(value instanceof MyClass) 

在另一方面,你可以使用一個完全成熟的方法從Class類,即給出了兩個對象,就可以判斷它們是否屬於同一個層次(比instanceof更強大IMO):

if(value.getClass().isAsignableFrom(getClass())) 

第二種方法確定在給定任何種類的對象時,在執行時間,值是否與當前類(this)的類或超類/超接口完全相同。這是isAsignableFrom擅長的地方,因爲使用instanceof您需要在編譯時知道引用類型。