Можно ли вернуть «это» в универсальном интерфейсе с реализацией по умолчанию, используя f-ограниченную квантификацию - PullRequest
0 голосов
/ 26 мая 2018
public interface IEq<T> {
  public abstract Boolean testEqual(final T y);

  public default Boolean testNotEqual(final T y) {
    return !this.testEqual(y);
  }
}

public interface IOrd<T> extends IEq<T> {
  public abstract Boolean lessEqualThan(final T y);

  public default T min(final T y) {
    if(lessEqualThan(y)) return this; // <--- ERROR: cannot convert from IOrd<T> to T
    else return y;
  }
}    

Этот код стиля ООП очень похож на https://en.wikipedia.org/wiki/Bounded_quantification.

Разница в том, что я перемещаю внешнюю функцию (Fmin) в метод Object (мин.)

Myвопрос: возможно ли вернуть «this» в универсальном интерфейсе (IOrd) с реализацией по умолчанию (min: T -> T), используя f-ограниченную квантификацию?

1 Ответ

0 голосов
/ 26 мая 2018

Вы не можете вернуть IOrd<T> в методе, который возвращает T.Вы должны изменить свою подпись:

public abstract Boolean lessEqualThan(final IOrd<T> y);


public default IOrd<T> min(final IOrd<T> y) {
    if(lessEqualThan(y)) return this;
    else return y;
}

Если вы хотите вернуть T, вы должны предоставить способ получить значение T из вашего класса реализации:

public abstract Boolean lessEqualThan(final T y);

T getTValue(); // Your implementation must provide a way to get the T value

public default T min(final T y) {
    if(lessEqualThan(y)) return getTValue();
    else return y;
} 
...