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

标签 java casting polymorphism equals

我正在为我正在编写的稀疏矩阵类(学校项目的一部分)开发 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;
}

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

最佳答案

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

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/

相关文章:

java - 平均方法数组提示

java - 我应该如何模拟类之间的关联

c# - 为什么我不能从 List<MyClass> 转换为 List<object>?

c - 类型转换浮点值或使用 math.h floor* 函数?

objective-c - 如何在 Objective C 中将 float 转换为 int?

java - 如何在 ArrayList 上实现安全的读/写并发?

xsd 选择覆盖

c++ - 为什么不能在编译时解决运行时多态性?

c++ - 双重继承和多态性。如何从一个基类中分离出两个成员?

java - 调用后如何返回图像?