Java 方法参数:括号中的类型声明?

问题描述 投票:0回答:1

我正在实现一个

LinkedListDeque
数据结构。我写了一个
equals
方法和一个助手:

  1. 检查对象
    o
    是否是类
    LinkedListDeque
    的实例。如果属实的话
  2. 检查
    o
    中的每个节点是否等于
    this
    双端队列中的节点。

我写了一个助手,因为我需要一种方法来在

2
中两个
LinkedListDeque
对象之间而不是在
this
双端队列和
o
object
之间进行比较操作。当我第一次编写 equals_helper 方法时,我在类型声明中省略了括号。测试过,没用。 IDE 建议我在类型声明两边加上括号(即
equals_helper(LinkedListDeque o)
equals_helper((LinkedListDeque) o)
),并且 that 有效。

我试图找到一些关于我在这里所做的事情的文档,但我没有背景知识来知道我在寻找什么。 这个概念叫什么,我是否在 Java OOP 原则的背景下正确应用了它,是否有更好的方法来做到这一点?

public boolean equals(Object o) {
    if (!(o instanceof LinkedListDeque)) {
        return false;
    } else {
        return this.equals_helper((LinkedListDeque) o);
    }
}

public boolean equals_helper(LinkedListDeque L) {
    if (L.size() != this.size()) {
        return false;
    } else {
        Node orig_curr = sentinel.next;
        Node curr = L.sentinel.next;
        while (orig_curr.item != null || curr.item != null) {
            if (orig_curr.item == curr.item) {
                curr = curr.next;
                orig_curr = orig_curr.next;
            } else return curr.next.item == null && orig_curr.next.item == null;
        }
    }
    return true;
}
java casting arguments type-declaration
1个回答
0
投票

由于

equals
的参数属于
Object
类型,因此您需要将其转换为您想要使用的类型。在这种情况下
LinkedListDeque
。但从 Java 14 开始,您可以按如下方式进行操作:

public boolean equals(Object o) {
    if (o instanceof LinkedListDeque lld)) {
       return this.equals_helper(lld);
    }
    return false;
}

如果

instanceof
返回 true,它会自动转换为正确的类型并放置在
lld
中,然后可以使用。不需要显式转换。

注意:您应该首先检查对象是否相同。

if(this == obj) return true;

当你覆盖 equals 时,也覆盖

hashCode
是一个好习惯。

© www.soinside.com 2019 - 2024. All rights reserved.