我正在为我正在编写的稀疏矩阵类(学校项目的一部分)开发 equals() 方法。我经常遇到这样的问题:它不允许我使用特定于我的类的任何方法或其他成员,因为 that
(我用于参数的名称 equals
) 必须是泛型类型 Object
才能覆盖 Objects
的 equals()
方法。除此之外,我需要能够使用 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;
}
我尝试过搜索这个问题,虽然我找到了一些似乎在问同样的事情,但我找不到任何真正解释如何做到这一点的答案.
最佳答案
当你有一个基类的对象并且你知道它是哪种子类时,你可以通过向下转型来转换它。然后您可以调用特定于子类的任何方法。
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/