Вопрос:

Переопределение функции расширения `equals (Any?): Boolean`

kotlin

9 просмотра

1 ответ

21177 Репутация автора

Зависимость 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;
  }
}

Я хотел бы реализовать равных по расширению

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

но я получил предупреждение, что

Расширение затенено участником. public open fun equals(other: Any?): Boolean

и метод расширения не имеет никакого эффекта.

Могу ли я переопределить поведение равных?

Автор: Synesso Источник Размещён: 11.08.2019 08:35

Ответы (1)


0 плюса

564381 Репутация автора

Вы не можете переопределить метод, используя функцию расширения.

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

в Java эквивалентно наличию статического вспомогательного метода, такого как

public static boolean foo(OrderBookEntry fakeThis, Object other)

Функции расширения разрешаются статически, не могут использовать метод-член и должны быть явно импортированы (при вызове из другого пакета), чтобы быть доступными.

Автор: JB Nizet Размещён: 11.08.2019 08:52
Вопросы из категории :
32x32