首页 > 解决方案 > `equals(Any?): Boolean`的扩展函数覆盖

问题描述

Java 依赖项定义了一些没有 equals 方法的值类。他们真的应该实施它,但他们没有。

public class OrderBookEntry {

  private String price;
  private String qty;

  public String getPrice() {
    return price;
  }

  public void setPrice(String price) {
    this.price = price;
  }

  public String getQty() {
    return qty;
  }

  public void setQty(String qty) {
    this.qty = qty;
  }
}

我想通过扩展实现equals

fun OrderBookEntry.equals(other: Any?): Boolean = 
  EqualsBuilder.reflectionEquals(this, other)

但我收到警告

扩展被成员遮蔽。public open fun equals(other: Any?): Boolean

并且扩展方法没有效果。

我可以覆盖 equals 行为吗?

标签: kotlin

解决方案


您不能使用扩展函数覆盖方法。

fun OrderBookEntry.foo(other: Any?): Boolean

在 Java 中,等价于具有静态辅助方法,例如

public static boolean foo(OrderBookEntry fakeThis, Object other)

扩展函数是静态解析的,不能隐藏成员方法,并且必须显式导入(从另一个包调用时)才能使用。


推荐阅读