Вы можете потребовать, чтобы T
реализовал Comparable<T>
:
class CachedSupplier<T extends Comparable<T>>
Теперь, если вам все еще нужен CachedSupplier
для реализации Comparable<T>
(что я не уверен, что вы делаете), вы можете использовать T
compareTo()
метод:
class CachedSupplier<T extends Comparable<T>> implements Comparable<T>
{
private Supplier<? extends T> supplier;
private T value;
boolean isAvailable;
public CachedSupplier(Supplier<? extends T> supplier) {
this.supplier = supplier;
}
public T get() {
if (!isAvailable) {
value = supplier.get();
isAvailable = true;
}
return value;
}
public int compareTo(T o) {
return get().compareTo(o);
}
}
РЕДАКТИРОВАТЬ: Как прокомментировал Андреас, если ваш CachedSupplier
должен реализовать Comparable
, он, вероятно, должен реализовать Comparable<CachedSupplier<T>>
не Comparable<T>
:
class CachedSupplier<T extends Comparable<T>> implements Comparable<CachedSupplier<T>>
{
private Supplier<? extends T> supplier;
private T value;
boolean isAvailable;
public CachedSupplier(Supplier<? extends T> supplier) {
this.supplier = supplier;
}
public T get() {
if (!isAvailable) {
value = supplier.get();
isAvailable = true;
}
return value;
}
public int compareTo(CachedSupplier<T> o) {
return get().compareTo(o.get());
}
}