kotlin - `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 行为吗?
解决方案
您不能使用扩展函数覆盖方法。
fun OrderBookEntry.foo(other: Any?): Boolean
在 Java 中,等价于具有静态辅助方法,例如
public static boolean foo(OrderBookEntry fakeThis, Object other)
扩展函数是静态解析的,不能隐藏成员方法,并且必须显式导入(从另一个包调用时)才能使用。
推荐阅读
- java - Eclipse Java IDE,在光标之后插入分号。我如何解决它?
- javascript - 以不同方式定义的 JavaScript 对象
- keras - 对于回归模型,为什么传递给 model.fit 的验证集与 model.evaluate 的度量结果不同?
- azure - 允许 Azure CDN 访问 Azure KeyVault
- python - 在函数内的函数内创建和返回局部变量不起作用 numpy
- sas - 如何根据 SAS 中前行的条件添加标志
- angular - 多角度请求
- c++ - C++变换参数初始化问题
- r - 在 R 中修改字符串
- python - 类型错误:stream_get_listen_key() 缺少 1 个必需的位置参数:'self'