[英]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.