[英]Comparable implementation for Generic Type?
我目前正在实施一个需要实施 Comparable 的自定义供应商。
由于我的 class 实现了 Comparable,因此我必须自己实现 compareTo()。 但是,作为通用类型,我如何比较这些值? 因为它们几乎可以是任何东西。
class CachedSupplier<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);
}
}
您可以要求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);
}
}
编辑:正如 Andreas 评论的那样,如果您的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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.