【问题标题】:What does this method work with instanceof? [duplicate]这个方法对 instanceof 有什么作用? [复制]
【发布时间】:2018-09-04 19:58:51
【问题描述】:

我想知道这个方法是如何工作的?尤其是这部分代码“((Book)o).getId()”

public boolean equals(Object o){
    if (o instanceof Book){
        return id == ((Book) o).getId();
    }
    return false;
}

谢谢

【问题讨论】:

  • 如果oBook 的一个实例,它会将o 转换为Book 并获取其ID。哪个方面让您感到困惑?
  • 查找“铸造”。你得到一个Object 参数,检查它是否是Book 类型(使用instanceof),如果是,你将它转换为Book,这样你就可以调用Book 方法(getId())它。
  • 它实际上是Book b = (Book) o; return id == b.getId(); 的简写形式Object 没有getId() 方法,但Book 有。 o instanceof Book 用于确保 oBook 类型或者是 Book 的子类型。

标签: java methods boolean equals instanceof


【解决方案1】:
public boolean equals(Object o){
    if (o instanceof Book){ 
        return id == ((Book) o).getId(); 
    }
    return false; 
}

方法传入一个对象,instanceof 检查传入方法的对象是否为Book类型。

如果对象是Book 类型,那么它使您能够安全地将对象转换为Book

现在对象是Book - 您可以使用Book 类具有的方法。

如果 Book 对象 oid 具有相同的值 - 它将返回 true 否则 false

如果对象不是一本书,它将默认返回false

【讨论】:

    【解决方案2】:

    首先,if 语句验证变量 o 是否是 Book 类的实例。

    if (o instanceof Book)
    

    其次,如果 o 是一本书,那么我们可以将它转换为一本书。 下面的代码返回一个 Book 对象:

    Book myVar = (Book) o;
    

    第三,我们可以在 myVar 中调用 Book 方法。例如:

    myVar.getId()
    

    您发布的代码在一行中完成了所有这些。投射,调用 Book 方法并返回响应。

    【讨论】:

      【解决方案3】:

      instanceof 语法检查第一个对象是否实现或扩展了第二个对象。如果是,则返回 true。然后,由于它一本书,它获取对象的 ID,即一本书。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2016-12-29
        • 2013-06-02
        • 1970-01-01
        相关资源
        最近更新 更多