List<int> list; //compile-time error
List<int[]> list1; //works fine
Run Code Online (Sandbox Code Playgroud)
这种行为有什么理由吗?我知道原语需要加框,但为什么不是原始数组呢?
因为Java数组是对象,而不是基元.并且您可以存储对作为泛型类型实现的Java集合中的对象的引用.
在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2).可以在数组上调用Object类的所有方法.
请注意,数组和泛型并不总能很好地协同工作.虽然您可以创建数组集合,但无法创建集合数组.在运行时执行阵列内容的类型检查.但是由于类型擦除,在运行时不知道参数化类型的集合.来自Joshua Bloch的"Effective Java",第2版,"第25项:首选列表到数组":
例如,创建泛型类型,参数化类型或类型参数的数组是非法的.这些数组创建表达式都不合法:
new List<E>[], new List<String>[], new E[].所有这些都会在编译时导致通用数组创建错误.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |