有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型类型的java可比实现?

我目前正在实施一个定制供应商,该供应商需要实施一个可比较的标准

因为我的类实现了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);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您可以要求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());
        }
    }