[英]How can I change between classes?
這是我寫的。
public class Test {
public static void main(String[] args) {
Object a1 = new A();
Object a2 = new Object();
System.out.println(a1.toString());
System.out.println((a1 == a2) + " " + (a1.equals(a2)));
}
}
class A {
int x;
public boolean equals(Object obj) {
A _obj = (A) obj;
return x == _obj.x;
}
public String toString() {
return "A's x is " + x;
}
}
如何在控制台上設置“假真”? 除了修改 main 方法。 只修改A方法。 我試圖將 Object a2 更改為 a2。 如何在 A class 中更改它?
The reason you're getting the error class java.lang.Object cannot be cast to class A
is because the object you're comparing it to is not an instance of class A, so trying to cast the object as such will fail.
在實現.equals
方法時,您應始終先執行以下三項檢查,以確保 object 的安全,然后再嘗試比較其屬性:
if (obj == this) return true;
如果兩個對象是完全相同的object,意味着它們是同一個實例,而不僅僅是兩個具有相同屬性的對象,則立即返回true,因為不需要檢查屬性。
if (obj == null) return false;
這可以通過嘗試訪問null
object 的屬性來防止NullPointerException
(例如在您的代碼中return x == _obj.x
)
if (;(obj instanceof A)) return false;
如果 object 不是 class 的實例,則類型轉換將失敗(就像在您的代碼中所做的那樣),這可以通過在嘗試轉換之前返回false
來防止這種情況發生。
最后,如果代碼達到這一點,您可以像在代碼中所做的那樣轉換和比較對象:
A _obj = (A) obj;
return this.x == _obj.x;
請記住,如果您要比較的屬性不是原始屬性,則應在它們上使用.equals
首先,您所說的“使虛假為真”究竟是什么意思? 我假設您希望您的代碼運行,但是您能否給我們更多關於您正在嘗試做的事情的背景信息?
您的代碼失敗的原因是當您將 Object ( a2 ) 的實例傳遞給 equals 方法時,您試圖將其轉換為A類型的引用。 但由於a2實際上是Object而不是A的純實例,因此此轉換失敗。 盡管Object是 Java 中所有內容的基類,包括您自定義的 A ,但您的方向是錯誤的。 Object 不包含屬性x因此以這種方式進行轉換是不安全的。 Java 的類型檢查機制會捕捉到這一點,並在您嘗試強制轉換時拋出錯誤。
查看解釋 inheritance 和鑄造的文檔以了解此基礎知識。 例如, 這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.