在一个用于android的ArrayList中,例如simplelistadapter,我经常看到ArrayList<?>
,在一些教程中,我已经回顾过<?>
被一些值取代。但我仍然不太确定这代表什么变量或限定符。
答案 0 :(得分:4)
它被称为Generics。
例如,您可以这样做:
ArrayList<Integer> list = new ArrayList();
list.add(new Integer(1));
list.add(new Integer(2));
.....
Integer i = (Integer)list.get(1);
或者你可以这样做:
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
.....
Integer i = list.get(1);
如您所见,无需投射。
答案 1 :(得分:2)
这意味着ArrayList
可以包含任何非基本类型。
答案 2 :(得分:2)
是泛型类型的通配符。通常,您声明一个数组列表,如:
ArrayList<String>
确切指定类型的位置。该列表将包含字符串。 但有时你想创建一个方法或类来获取任何类型的ArrayList,或者你想要一个指向任何类型的ArrayList的字段
public void removeFirstItem(ArrayList<?> target) {
...
}
现在,此方法可以使用ArrayList<String>
或ArrayList<Long>
等,并对其执行某些操作。
Similiary你可以有一个局部变量:
ArrayList<?> someList;
someList = new ArrayList<String>();
someList = new ArrayList<Long>);
这有效,而:
ArrayList<String> someList = new ArrayList<String>();
someList = new ArrayList<Long>();
不会,因为someList被指定为ArrayList<String>
,因此只能为其分配ArrayList<String>
。
答案 3 :(得分:0)
与ArrayList<? extends Object>
类似,这意味着它可以包含从Object
类继承的任何对象(即Java中的所有对象)。
答案 4 :(得分:0)
语法是“通配符”。 Java泛型需要它:
通配符可以是“有界”或“无界”。编译/设计时泛型类型的整个问题与“类型擦除”的运行时JVM问题密切相关:
http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
'希望有帮助.. pSM
答案 5 :(得分:0)
这是关于泛型的问题。 &lt;(对象的种类)&gt;语法表示只有某种对象(类实例)可以作为参数传递。当你有语法时,你说任何类实例都可以传递。