Kotlin `equals(Any?):Boolean的扩展函数重写`

Kotlin `equals(Any?):Boolean的扩展函数重写`,kotlin,Kotlin,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 S

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)
但我得到了一个警告

扩展被成员隐藏<代码>公共开放乐趣等于(其他:任何?):布尔值

推广方法没有效果


我可以重写equals行为吗?

不能使用扩展函数重写方法

fun OrderBookEntry.foo(other: Any?): Boolean
在Java中,相当于拥有一个静态助手方法,例如

public static boolean foo(OrderBookEntry fakeThis, Object other)

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

不能使用扩展函数重写方法

fun OrderBookEntry.foo(other: Any?): Boolean
在Java中,相当于拥有一个静态助手方法,例如

public static boolean foo(OrderBookEntry fakeThis, Object other)

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

为扩展函数选择其他名称?顺便说一句,为什么要使用反射?@JBNizet我正在尝试覆盖
等于
。如果我选择一个不同的名称,对象相等性是如何工作的?反射,因为它是可用的。当它起作用时,我会选择更好的。如果不调用该方法,则实现没有意义。不能使用扩展函数重写任何内容。扩展函数只是伪装成成员函数的静态辅助方法。啊,好的。那太不幸了)不过,我相信这样做是有充分理由的。我会接受“你不能”回答。为扩展函数选择一个不同的名称?顺便问一下,为什么要使用反射?@JBNizet我正在尝试覆盖
equals
。如果我选择一个不同的名称,对象相等如何工作?反射是因为它是可用的。当它工作时,我会选择更好的名称。如果不调用该方法,则实现没有意义。您不能覆盖使用扩展函数的nything。扩展函数只是伪装成成员函数的静态助手方法。啊,好吧。这很不幸。:。不过,我相信这样做是有原因的。我会接受“你不能”的回答。