簡體   English   中英

我怎樣才能在課程之間進行更改?

[英]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.

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