繁体   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