1.什么是收集< ? >
我测试了这段代码:
Collection<?> l = new ArrayList<String>();
l.add("s");
我无法添加&#34; s&#34; String.So what for for&lt; ? &GT; ?我会在哪些情况下使用它?
2. Collection&lt;之间的区别是什么? ? &GT;和集合&lt;对象&gt;
答案 0 :(得分:0)
Collection<?>
(发音为&#34;未知&#34的集合;),即a 元素类型匹配任何东西的集合。它被称为通配符 因为显而易见的原因打字。
Collection<?>
的变量是可以包含任何类型的集合。您的代码不知道将在该集合中放置什么类型的对象。这与Collection<Object>
略有不同,Collection<?>
是一个包含Object类对象的集合(它指定了Object,而不是说它可以除外)。 (这是java中每个对象的父级,包括String)。您通常不想初始化void printCollection(Collection<?> c) {
for (Object e : c) {
System.out.println(e);
}
}
,因为您无法为其添加任何内容(据我所知)。
但是,当您正在创建一个可以对ANYTHING集合进行操作的函数时,这非常有用。
例如,您可以从oracle创建类似该示例的函数。
void printCollection(Collection<Object> c) {
for (Object e : c) {
System.out.println(e);
}
}
此方法将能够接受任何类型的集合。
哪里
Collection<Object>
只能在Collection<String>
上运行(即非String // fall back font if init() fails
public volatile static Font fallbackFont = new Font("serif", Font.PLAIN, 24);
public synchronized static Font myFont() {
Font myFont;
try {
FileInputStream fis = new FileInputStream("res/fonts/gregorian.ttf");
myFont = Font.createFont(Font.TRUETYPE_FONT, fis);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(myFont);
} catch (Exception e) {
System.err.println("myFont font failed to load.");
return fallbackFont;
}
return myFont;
}
,即使String是Object的子类)
答案 1 :(得分:0)
1.什么是收集&lt; ? &GT;
move aaa bbb >nul 2>nul
指定其元素类型未知的Collection<?>
。由于元素类型未知,因此您永远不会知道任何特定对象属于集合所接受的类型,因此向其添加任何内容都不是类型安全的。
另一方面,您始终可以假设您从此类集合中获取的任何元素都是Collection
,并且您可以调用任何查询和元素删除方法。< / p>
这对于不依赖于集合元素类型的集合操作非常有用。
2. Collection&lt;之间的区别是什么? ? &GT;和集合&lt;对象&gt;
Object
是一个可能有Collection<Object>
个元素的集合。这两者是相似的,因为你不能对这种集合的元素类型做出任何假设,但它们完全不同,因为将任何对象添加到Object
是安全的。 原因为什么你不能对元素类型做出假设,这些假设会产生重大影响:对于Collection<Object>
,你不知道类型约束,但对于{{1是(你知道)没有约束。