簡體   English   中英

通用類型的可比實現?

[英]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> (我不確定您是否這樣做),您可以使用TcompareTo()方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM