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)
我的问题是:是否有可能返回&#34;这个&#34;在使用f-bounded量化的默认工具(min:T - &gt; T)的通用接口(IOrd)中?
答案 0 :(得分:1)
您无法在返回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;
}