对于集合,我们什么时候更喜欢使用对象类型,什么时候使用原始类型
For collections, when do we prefer using Object type , and when do I use primitive type
例如
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 尽可能省略某些内容的惯例?
在使用 java 5+
时应始终使用类型
好
ArraList<Integer> al = new ArrayList<Ingeter>();
不编译
ArrayList<int> al = new Arraylist<int>();
仅适用于旧 java 版本。
ArrayList al = new ArrayList();
你有点跳进了未来。 :-)
目前,集合上的基元(通常,基元类型上的泛型)是不允许的,语句 ArrayList<int> al = new Arraylist<int>();
将无法编译。
这是引入包装器类型(如 Integer
、Double
等)的原因之一。有了它们,我们就可以在集合中存储数值(和 boolean
包裹在 Boolean
中)值。
据我所知,Generics over Primitive Types 功能计划在下一个平台版本中引入(最有可能在 JDK10 中,但时间会告诉我们是否会放弃或实现) .
在处理泛型时使用原始类型不是好的约定。
同样正如其他张贴者所说,不可能将原始类型用作通用类型。
ArrayList<int> al = new Arraylist<int>();
不会编译。您必须使用整数框 class
在 java1.5 之前你可以创建没有泛型的 ArrayList.. 就像
ArrayList a= new ArrayList();
这意味着您的数组列表可以包含任何对象。由于 Object
class 是所有 class 的超class,您可以将任何 Object
插入其中。
但它有一个缺点。当你使用 get()
方法时,你必须将 Object
转换回来。
在 Java 1.5 及更高版本中,您可以为特定类型创建和 ArrayList
。
ArrayList<type> obj= new ArrayList<type>();
这确保了确定的类型保证,并且您不必在从列表中获取对象时转换对象。
使用 Java 1.5 的合集
您可以存储 Object
和 Object
的子 class。您不能存储像 int
这样的基元类型。
因此,为了将 int
存储在 ArrayList
中,您必须在定义 ArrayList
.
时使用相应的包装器 class
Java 会自动将 int
转换为 Integer
或 Integer
转换为 int
并使用一种名为 autoboxing/outboxing 的机制。
例如
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 尽可能省略某些内容的惯例?
在使用 java 5+
时应始终使用类型好
ArraList<Integer> al = new ArrayList<Ingeter>();
不编译
ArrayList<int> al = new Arraylist<int>();
仅适用于旧 java 版本。
ArrayList al = new ArrayList();
你有点跳进了未来。 :-)
目前,集合上的基元(通常,基元类型上的泛型)是不允许的,语句 ArrayList<int> al = new Arraylist<int>();
将无法编译。
这是引入包装器类型(如 Integer
、Double
等)的原因之一。有了它们,我们就可以在集合中存储数值(和 boolean
包裹在 Boolean
中)值。
据我所知,Generics over Primitive Types 功能计划在下一个平台版本中引入(最有可能在 JDK10 中,但时间会告诉我们是否会放弃或实现) .
在处理泛型时使用原始类型不是好的约定。 同样正如其他张贴者所说,不可能将原始类型用作通用类型。
ArrayList<int> al = new Arraylist<int>();
不会编译。您必须使用整数框 class
在 java1.5 之前你可以创建没有泛型的 ArrayList.. 就像
ArrayList a= new ArrayList();
这意味着您的数组列表可以包含任何对象。由于 Object
class 是所有 class 的超class,您可以将任何 Object
插入其中。
但它有一个缺点。当你使用 get()
方法时,你必须将 Object
转换回来。
在 Java 1.5 及更高版本中,您可以为特定类型创建和 ArrayList
。
ArrayList<type> obj= new ArrayList<type>();
这确保了确定的类型保证,并且您不必在从列表中获取对象时转换对象。
使用 Java 1.5 的合集
您可以存储 Object
和 Object
的子 class。您不能存储像 int
这样的基元类型。
因此,为了将 int
存储在 ArrayList
中,您必须在定义 ArrayList
.
Java 会自动将 int
转换为 Integer
或 Integer
转换为 int
并使用一种名为 autoboxing/outboxing 的机制。