0
意味着有時候我看到java代碼,它看起來像Java泛型的<?>
Class<?>
,我不明白它的應有之義。
如果我看到這樣的:
ComboBox<Order> box = new ComboBox<>();
那麼它清楚地表明框只能包含有關<?>
從Order類的對象,但什麼?它等於還是完全不同的東西?
意味着有時候我看到java代碼,它看起來像Java泛型的<?>
Class<?>
,我不明白它的應有之義。
如果我看到這樣的:
ComboBox<Order> box = new ComboBox<>();
那麼它清楚地表明框只能包含有關<?>
從Order類的對象,但什麼?它等於還是完全不同的東西?
它被稱爲通配符,它只是意味着你不需要指定通用類型。它有時是有用的,但不應該用於一般情況。一個情況下,你可以放心地使用它是當您使用類型限制:
public void withWildCard(List<? extends Collection<Integer>> collections) {
...
}
public void withoutWildCard(List<Collection<Integer>> collections) {
...
}
List<Collection<Integer>> listOfCollections;
withWildcard(listOfCollections); // valid call
withoutWildcard(listOfCollections); // valid call
List<List<Integer>> listOfLists;
withWildcard(listOfLists); // valid call becase List is a subclass of Collection
withoutWildcard(listOfLists); // invalid call, does not compile because List does not match Collection
順便說一句,在你的問題的片段是錯誤的。它應該是
ComboBox<Order> box = new ComboBox<>();
如果沒有在聲明中指定側泛型類型,編譯器將無法推斷出菱形操作符(<>
)的類型。
請檢查您的答案。我沒有看到這兩種方法 – Kachna
之間有什麼區別哈哈,複製粘貼不好...謝謝,我修好了 – Dici
那麼'>'等於'