gpt4 book ai didi

java - 在 ny equals() 方法中调用泛型类型的特定方法

转载 作者:行者123 更新时间:2023-11-30 06:28:23 30 4
gpt4 key购买 nike

我正在为我正在编写的稀疏矩阵类(学校项目的一部分)研究 equals() 方法。我经常遇到这样一个问题,它不允许我使用任何方法或其他特定于我的类的成员,因为 that(我用于参数的名称 equals) 必须是通用类型 Object 才能覆盖 Objectsequals() 方法。甚至除此之外,我还需要能够使用我的 SparseMatrix 类型参数的一些方法才能真正比较相等性,除非我也能算出你。我该如何编写它来绕过这个障碍?

我有几个晚上如何做的想法,但它们似乎都不起作用:我试过转换参数,我试过覆盖 equals(),我什至试过一些其他的东西,但似乎都不起作用。

这是我目前所拥有的,但是,正如我所说,我无法让它发挥作用。

public boolean equals(Object that) {
if (that instanceof SparseMatrix<?>) {
if (this.xSize != that.xSize ||
this.ySize != that.ySize)
return false;
/* make some more comparisons that depend on specific
* members of my matrix class, etc...*/
}
return false;
}

我已经尝试搜索 SO 来解决这个问题,虽然我找到了一些似乎在问同样的事情,但我找不到任何真正解释如何去做的答案.

最佳答案

当你有一个基类的对象并且你知道它是哪种子类时,你可以通过向下转型来转换它。然后您可以调用特定于子类的任何方法。

public boolean equals(Object o) {
if (o instanceof SparseMatrix<?>) {
SparseMatrix that = (SparseMatrix)o; // <-- downcast
if (this.xSize != that.xSize ||
this.ySize != that.ySize)
return false;
}
return false;
}

如果 o 不是 SparseMatrix 的实例或扩展/实现 SparseMatrix 的类(您已经检查过,但我们假设您没有),您将得到 ClassCastException。

关于java - 在 ny equals() 方法中调用泛型类型的特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12654403/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com