【问题标题】:Java objects instanceofJava 对象实例
【发布时间】:2010-10-13 05:07:27
【问题描述】:

说明书说: 创建一个 equals 方法,该方法接受对象引用并在给定对象等于该对象时返回 true。 * 提示:您需要 'instanceof' 并转换为(位置)

我有:

class Position {

    private double x,y;
    private int id;

public boolean instanceOf(Object a)
    {
        boolean isInstance;
        if ((Position)a instanceof Position)
            isInstance=true;
        else
            isInstance=false;
        return isInstance;
    }

但是我做错了,我不知道我的问题是什么。我是对象的新手,所以这让我有点困惑..

【问题讨论】:

标签: java object instanceof


【解决方案1】:

由于这是一个家庭作业问题,我不会给出详细的答案。 您必须实现 equals() 方法,而不是 instanceOf() 方法。我认为这个链接有帮助:

其中的代码示例应该足够了。如果您需要更多提示,请再次询问。

【讨论】:

  • 嗯,好吧,所以我唯一缺少的是他们示例中的这一行: Car c = (Car) o;在我的情况下,我将如何实现这一点?
  • 好的,您的第二个链接有帮助。但是,我对这一行感到困惑:if(this == obj)....这到底是做什么的,在这种情况下是什么'this'?
  • @fprime:if(this == obj) 只是一种优化。没有这条线它仍然有效。
  • 你需要覆盖等于 - 和 - hashCode() .. 由于这是作业,下一个问题可能与 hashCode() :) - StackTrace 9 小时前
【解决方案2】:

他清楚地说要创建一个equals() 方法,你也在这里得到它。但即便如此,您还是创建了一个名为instanceOf() 的方法。为什么?

此外,您可能会在此行获得ClassCastException,以防传递了其他类型的对象。

    if ((Position)a instanceof Position)

这意味着,确切地说,在确保传递的objectPosition 类型之后,您应该只将object 转换为Position。这意味着现在可以通过比较走得更远。如果它首先不是Position 类型,那么您为什么还要费心进一步比较它。因为它永远不可能相等。我希望你明白我的意思。

[编辑以回答评论中的问题]

嗯,实际的实例应该是 Position 类型。一旦我们知道它是使用 instanceof 操作符的 Position 类型,我们就知道将它从 Object 类型转换为 Position 类型是安全的。现在的问题是为什么我们需要强制转换?因为最初实例的类型是 Object,我们不确定实际类型。您可能已经知道在 Java 中可以将任何类型分配给 Object 类型,因为 Object 是 Java 中每个类的父类。因此,在应用 instanceof 之前,我们并不确定实例的类型。

如果您不强制转换它,您将永远无法访问它的属性,即 x、y 和 id。您可以尝试在不强制转换的情况下访问实际对象上的任何这些。你会知道你不能。因此,您也无法比较它们。我希望,这说明了。

【讨论】:

  • 那么如果是Position类型,我为什么要强制转换成Position类型呢?
【解决方案3】:

尽管Object aPosition 类型,但它被定义为Object 类型。为了访问Position a 的属性,我们必须使用

Object a 转换为Position p
Position p = (Position)a; 

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2012-07-16
    • 1970-01-01
    • 2017-09-23
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多