0
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;
  }
}    

此 OOP 样式代码与https://en.wikipedia.org/wiki/Bounded_quantification非常相似。

不同之处在于我将外部函数 (Fmin) 移动到 Object 方法 (min)

我的问题是:是否可以使用 f 有界量化在具有默认实现(min:T -> T)的通用接口(IOrd)中返回“this”?

4

1 回答 1

1

您不能以 returnIOrd<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;
} 
于 2018-05-26T10:40:19.837 回答