`

[#0x001B] Arrays.asList()

    博客分类:
  • Java
 
阅读更多

  Arrays和Collections包含的都是static方法,可以将其视为工具类。Arrays.asList()这个方法有点特殊,这里记录一下。

  首先,Arrays.asList()返回的是一个List (List是一个接口,返回List实际是返回List接口的一个实现),这个List在底层是有数组实现的,所以size是fixed的。所以,下面的代码是不可以的:

List<Integer> list = Arrays.asList(1, 2, 3);
list.add(4); //error

 

  其次,如果不指定返回List的类型(即<>部分)的话,Arrays.asList()对其返回List的类型有自己的判断,可以视为它自身的一种优化机制,如下所示:

// Arrays.asList() makes its best guess about type.

import java.util.*;

class Snow {}

class Powder extends Snow {}
class Crusty extends Snow {}
class Slush extends Snow {}

class Light extends Powder {}
class Heavy extends Powder {}

public class AsListInference 
{
	public static void main(String[] args) 
	{
		List<Snow> snow1 = Arrays.asList(new Crusty(), new Slush(), new Powder()); //pass

		//List<Snow> snow2 = Arrays.asList(new Light(), new Heavy()); //error
		List<Powder> snow2 = Arrays.asList(new Light(), new Heavy()); //pass
		
		List<Snow> snow3 = Arrays.asList(new Light(), new Crusty()); //pass

		List<Snow> snow4 = new ArrayList<Snow>();
		Collections.addAll(snow4, new Light(), new Heavy()); //pass

		List<Snow> snow5 = Arrays.<Snow>asList(new Light(), new Heavy()); //pass
	}
}

  snow1添加3个Snow的导出类对象,没有问题。

  snow2添加2个Snow的导出类对象,按理也是可以的,不过由于它们都是Powder,所以Arrays.asList()返回的是一个List<Powder>。可见Arrays.asList()返回的是精确类型的list。

  snow3混合添加,也没有问题。

  snow4不用Arrays.asList(),使用Collections.addAll(),就没有snow2中的局限了。

  如果一定要Arrays.asList(new Light(), new Heavy())返回List<Snow>而不是List<Powder>,可以用Arrays.<Snow>asList()来强制产生List<Snow>,如snow5。

分享到:
评论

相关推荐

    Windows蓝屏画面错误代码说明一览表

    0x001B: Unloaded Driver - **含义**: 设备驱动程序已卸载。 - **原因**: 驱动程序在使用过程中被意外卸载。 - **解决方法**: 重新安装驱动程序。 #### 18. 0x001C: Printer Out of Paper - **含义**: 打印机缺纸...

    电脑蓝屏代码一览表 有助于 你更好的了解你的电脑为什们蓝屏啊!

    ### 0x001b - 硬件错误 泛指任何硬件故障。 ### 0x001c - 打印机没有纸张 打印机没有足够的纸张进行打印任务。 ### 0x001d - 系统无法写入磁盘 磁盘写入权限或空间问题。 ### 0x001e - 系统无法获取驱动程序 ...

    Windows 错误码整理

    ### 0x001B - 指令被忽略。 某些命令或操作在当前上下文中被忽略,可能因为它们不适用或被禁用。 ### 0x001C - 打印机脱机。 当打印机处于脱机状态,即不接受打印作业时,会返回此错误。 ### 0x001D - 系统无法...

    Windows xp 蓝屏代码详解

    #### 0x001B - 设备忙 - **描述**:设备正忙于其他操作。 - **可能原因**:设备负载过高。 #### 0x001C - 打印机缺纸 - **描述**:打印机没有纸张。 - **可能原因**:打印机缺纸。 #### 0x001D - 系统无法写入设备...

    学生成绩管理系统代码

    `#define ESC 0x001b` 定义了转义字符的ASCII码值。 ### 2. 结构体定义 在代码中还定义了一个结构体类型 `stuType`: ```c struct stuType /* 学生结构体 */ { char NO[11]; /* 学号,长度为10 */ char XM[10]; ...

    windows蓝屏代码

    #### 0x001B - 系统需要重启 **描述**:这个错误代码表示系统需要重启。 **解决方法**:立即重启系统以避免进一步的问题。 #### 0x001C - 打印机无纸 **描述**:这个错误代码表示打印机缺纸。 **解决方法**:向...

    学生管理系统,学生管理系统

    #define ESC 0x001b/*˳*/ #define F1 0x3b00/*鿴ϢHelpMassage()*/ #define F2 0x3c00/*ѧɼ*/ #define F3 0x3d00/*ѧŲ*/ #define F4 0x3e00/* */ #define F5 0x3f00/*гѧɼ*/ #define F6 0x4000/*ͳ*/ ``` 这里...

    rt5616文档

    - `{RT5616_DRC_AGC_3,0x0100}`. #### 三、总结 rt5616文档为解决嵌入式系统中的音频问题提供了宝贵的指导和解决方案。通过仔细阅读并遵循文档中的建议,工程师们可以有效地诊断和解决与rt5616相关的各种技术难题...

    陕师大 编译原理考试试题

    001B 关于 G[S] 的语法树 语法树如下所示: ``` S / \ 0 B / \ 0 B / \ 1 S / \ 0 B / \ 1 ε ``` ### 二、构造文法 G[E] 要求构造一个文法 G[E] 使得表达式中只含有双目运算符 + 和 *,且 + 的优先级...

    系统动力学软件VEN手册

    ### 系统动力学软件VEN手册知识点解析 #### 一、概述 系统动力学软件VEN(通常指Vensim)是一种广泛应用于系统动力学领域的专业建模与仿真工具。其最新版本为Vensim 5.4a,在该版本中进行了一系列的功能改进与优化...

    蓝屏代码解析。欢迎下载。

    - **0x001b**: 请求的资源不存在。 - **0x001c**: 打印机没有纸张。 - **0x001d**: 系统无法写入注册表。 #### 0x001e - 0x0021 - **0x001e**: 无法获取注册表值。 - **0x001f**: 请求的系统服务不可用。 - **0x...

    将PSD网站模板转换为XHTML+CSS网页.pdf

    background: url(images/background.png) #001b32 repeat-x; font: 12px Arial, Helvetica; color: #c8c8c8; } #wrapper { margin: 0 auto; width: 850px; } ``` ### C. Logo和站点名的切片 1. 选择并复制...

    as达式语法.txt

    - `\u001B` 常用于控制台的颜色及样式更改。 ### 二、字符类 #### 1. 字符类定义 - 字符类是用来匹配特定集合内的任意单个字符的一种方式。 - `[abc]` 匹配'a'、'b'或'c'中的任何一个字符。 - `[^abc]` 匹配除'...

    学生成绩管理源程序.txt

    - `#define ESC 0x001b`:定义 ESC 键的 ASCII 值。 - `#define F1 0x3b00`:定义 F1 键的 ASCII 值,用于显示帮助信息。 - `#define F2 0x3c00`:定义 F2 键的 ASCII 值,用于查询学生信息。 - `#define F3 0x3d00`...

    TV5603DJ三轴点胶机BZ001B178A用户手册

    根据提供的文件信息,我们可以深入解析TV5603DJ三轴点胶机BZ001B178A用户手册中的关键知识点。 ### 1. 关于TV5600系列点胶控制系统 #### 1.1 系统概述 TV5600系列点胶控制系统是由深圳众为兴技术股份有限公司研发...

    学生管理系统 简单设计

    - `#define ESC 0x001b`、`#define F1 0x3b00`等:定义了一些键盘键值的宏,这些值代表了特定按键的ASCII码或者扫描码,用于识别用户的按键输入。 ### 3. 结构体定义 - `struct stuType`:定义了一个结构体类型`...

    NlsLexicons001b.dll

    NlsLexicons001b

    NlsData001b.dll

    NlsData001b

    HUAWEI MU509 HSDPA LGA 模块 底板说明书-(V100R 001B01_01,Chinese)1227

    根据给定的文件信息,我们可以深入探讨HUAWEI MU509 HSDPA LGA模块底板说明书所涵盖的关键IT知识点,特别是针对模块开发、硬件接口、软件兼容性、以及相关的法律和技术声明。 ### 1. HUAWEI MU509 HSDPA LGA模块...

Global site tag (gtag.js) - Google Analytics