簡體   English   中英

構造函數中的其他類型界限

[英]Additional type bounds in constructor

說我有一個這樣的班級:

class OrderedFoo<T> {

    public OrderedFoo(Comparator<? super T> comparator) {
        //Do something
    }

}

我可以將其用於不可比較的對象,因為實現Comparable不需要type參數。

我還可以通過Comparator#naturalOrder將其用於可比較的對象。

例:

OrderedFoo<Watchable> nonComparable = new OrderedFoo<>((a, b) -> foo());
OrderedFoo<String> comparable = new OrderedFoo<>(Comparator.naturalOrder());

但是,必須為可比較類型指定默認比較器有點繁瑣。 是否可以編寫帶有僅接受可比較類型的類型參數的構造函數?

//Like this
public <???> OrderedFoo() {
    this(Comparator.naturalOrder());
}

我試過<T extends Comparable<? super T>> <T extends Comparable<? super T>>但我明白了

(java.util.Comparator<? super T>)
in OrderedFoo cannot be applied to
(java.util.Comparator<T>)

構造函數有可能嗎?

您不能直接使用構造函數來執行此操作,因為該構造函數必須適用於所有類型。 但您只希望它適用於可Comparable類型。

使用帶有適當約束的類型變量的靜態工廠方法:

public static <T extends Comparable<T>> OrderedFoo<T> naturalOrder() {
  return new OrderedFoo<>(Comparator.naturalOrdering());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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