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
那么'>'等于'