例如。
ArrayList<int> al = new Arraylist<int>();
或
ArraList<Integer> al = new ArrayList<Ingeter>();
另外, 我见过这样的代码:
ArrayList al = new ArrayList();
System.out.println("Initial size of al: " + al.size());
// add elements to the array list
al.add("C");
在ArrayList
声明中省略类型。这是一个好习惯吗?
我是否应该总是显式声明类型,或者这是Java约定以尽可能省略事物?
答案 0 :(得分:3)
你有点跳进未来。 : - )
目前,不允许集合上的原语(通常是基本类型的泛型),语句ArrayList<int> al = new Arraylist<int>();
不会编译。
这是引入包装类型(如Integer
,Double
等)的原因之一。有了它们,我们就可以在集合中存储数字(和boolean
包裹在Boolean
)值。
据我所知,计划在一些下一个平台版本中引入Generics over Primitive Types功能(最有可能在JDK10中,但时间将告诉它是否会被删除或将被实现)。 / p>
答案 1 :(得分:3)
在处理泛型时使用原始类型并不好。 另外正如其他海报所说,不可能使用原始类型作为泛型类型。
ArrayList<int> al = new Arraylist<int>();
不会编译。您必须使用整数框类
答案 2 :(得分:2)
使用java 5 +
时,应始终使用type好
ArraList<Integer> al = new ArrayList<Ingeter>();
不编译
ArrayList<int> al = new Arraylist<int>();
仅适用于旧的Java版本。
ArrayList al = new ArrayList();
答案 3 :(得分:2)
在java1.5之前,你可以创建没有泛型的ArrayList ..比如
ArrayList a= new ArrayList();
这意味着您的数组列表可以包含任何对象。由于Object
类是所有类的超类,因此您可以在其中插入任何Object
。
但它有一个缺点..当你使用Object
方法时,你必须强制转换get()
。
在Java 1.5及更高版本中,您可以为特定类型创建ArrayList
。
ArrayList<type> obj= new ArrayList<type>();
这确保了确保类型确保,并且您不必在从列表中获取时转换对象。
使用Java 1.5的集合
您可以存储Object
和Object
的子类。您无法存储int
等基元类型。
因此,为了在int
中存储ArrayList
,您必须在定义ArrayList
时使用相应的包装类。
Java将使用称为autoboxing / outboxing的机制自动将int
转换为Integer
或Integer
到int
。