Java 泛型类型的可比实现?
我目前正在实施一个定制供应商,该供应商需要实施一个可比较的标准 因为我的类实现了Comparable,所以我必须自己实现compareTo()。但是,作为泛型类型,如何比较这些值?因为它们几乎可以是任何东西Java 泛型类型的可比实现?,java,oop,generics,comparable,Java,Oop,Generics,Comparable,我目前正在实施一个定制供应商,该供应商需要实施一个可比较的标准 因为我的类实现了Comparable,所以我必须自己实现compareTo()。但是,作为泛型类型,如何比较这些值?因为它们几乎可以是任何东西 class CachedSupplier<T> implements Comparable<T>{ private Supplier<? extends T> supplier; private T value; boolean i
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);
}
}
class CachedSupplier实现了可比较的{
私人供应商您可以要求T
实施可比:
编辑:正如Andreas评论的那样,如果您的CachedSupplier
必须实现Compariable
,则它可能应该实现Compariable
而不是Compariable
:
class CachedSupplier实现了可比较的
{
私人供应商您可以要求T
实施可比:
编辑:正如Andreas评论的那样,如果您的CachedSupplier
必须实现Compariable
,则它可能应该实现Compariable
而不是Compariable
:
class CachedSupplier实现了可比较的
{
私人供应商类型应与自身(自身)具有可比性,这就是为什么您有T extensed Comparable
,即Comparable
类型参数是扩展Comparable
的类型。这也意味着CachedSupplier
必须实现Comparable
,但SELF是CachedSupplier
,而不是T
。这就使得方法比较(CachedSupplier o)
,允许您正确实现该方法,因此它实际上将此.value
与o.value
进行比较(通过get()
间接用于延迟加载)。在我使用CachedSupplier的主类中,我应该如何声明它?它当前是:private CachedSupplier supplier;(但不起作用)。现在应该是什么类型?我尝试了private CachedSupplier supplier;但没有work@Iva您应该决定实例化它的类型。例如CachedSupplier doubleSupplier=new CachedSupplier(Math::random);
或CachedSupplier longSupplier=new CachedSupplier(System::currentTimeMillis);
@Eran但它必须是泛型类型,因为我正在SpecialStream(也是自定义编码的)中实现CachedSupplier,其中一个变量是我创建的CachedSupplier。@Iva要实例化CachedSupplier
,必须向其传递一些供应商
实例,因此必须选择供应商
生成的对象类型。类型应与自身(自身)具有可比性,这就是为什么您有T extensed Comparable
,即Comparable
类型参数是扩展Comparable
的类型。这也意味着CachedSupplier
必须实现Comparable
,但SELF是CachedSupplier
,而不是T
。这就使得方法比较(CachedSupplier o)
,允许您正确实现该方法,因此它实际上将此.value
与o.value
进行比较(通过get()
间接用于延迟加载)。在我使用CachedSupplier的主类中,我应该如何声明它?它当前是:private CachedSupplier supplier;(但不起作用)。现在应该是什么类型?我尝试了private CachedSupplier supplier;但没有work@Iva您应该决定实例化它的类型。例如CachedSupplier doubleSupplier=new CachedSupplier(Math::random);
或CachedSupplier longSupplier=new CachedSupplier(System::currentTimeMillis);
@Eran但它必须是泛型类型,因为我正在SpecialStream(也是自定义编码的)中实现CachedSupplier,其中一个变量是我创建的CachedSupplier。@Iva要实例化CachedSupplier
,必须向其传递一些供应商
实例,因此必须选择供应商
生成的对象类型。
class CachedSupplier<T extends Comparable<T>>
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);
}
}
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());
}
}