`
cakin24
  • 浏览: 1388355 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

List<Interger>是List<Number>的子类吗?

    博客分类:
  • java
阅读更多

        在回答这个问题之前,我们先探究一下另外一个问题:Interger[]数组可以给Number[]数组赋值吗?先看下面这段代码:

public class ArrayErr
{
	public static void main(String[] args)
	{
		// 定义一个Integer数组
		Integer[] ia = new Integer[5];
		// 可以把一个Integer[]数组赋给Number[]变量
		Number[] na = ia;
		// 下面代码编译正常,但运行时会引发ArrayStoreException异常
		// 因为0.5并不是Integer
		na[0] = 0.5;   // ①
	}
}

        上面代码可以编译通过,但运行会报下面错误:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Double
 at ArrayErr.main(ArrayErr.java:13)

        这是一种潜在的风险。在Java的早期设计中,允许Interger[]数组赋值给Number[]数组,这一设计理念是存在缺陷的。一门设计优秀的语言,不仅需要提供强大的功能,而且能提供强大的“错误提示”和“出错警告”,这样才能尽量避免开发者犯错。而Java允许Integer[]数组赋值给Number[]显然不是一种安全的设计。

        Java泛型的设计原则是,只要代码在编译时没有出现警告,就不会遇到运行时ClassCastException异常。依据这一设计原则,泛型不认为List<Interger>是List<Number>的子类。下面两行代码证明了这一点。

 

		List<Integer> iList = new ArrayList<>();
		// 下面代码导致编译错误
		List<Number> nList = iList;

        另外我们可以得出更为广义的一个结论:假设Foo是Bar的一个子类型(子类或子接口),那么Foo[]依然是Bar[]的子类型,但G<Foo>不是G<Bar>的子类型。  

  

分享到:
评论

相关推荐

    int字节 interger区别

    复杂类型和基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而...

    LeetCode Reverse Interger 题目解决方案

    这里需要注意,`to_string`函数需要包含`&lt;string&gt;`头文件。 3. 初始化结果变量`result`为0。我们将在这个变量上进行累加,以构建反转后的整数。 4. 遍历字符串`str`的每个字符,计算每个数字的值,然后乘以10的...

    PL/SQL 基础.doc

    2) 关系 =(相当于JAVA中的==) &gt; &lt; &lt;&gt; != ~= ^= &lt;= &gt;= 3) 赋值 := 例子a:=2 4) 连接 || 例: 'abc' || 123 5) 标号 &lt;&lt; 需要的标记 &gt;&gt; 6) 注释 --(单行) /* */(段落) 7) 替代 &lt;scape&gt; &lt;tab&gt; &lt;enter&gt; 6. 文字 ...

    Interger-to-binary.rar_binary interger

    - `bin_recursive(13)` -&gt; `bin_recursive(6) + '1'` -&gt; `bin_recursive(3) + '1'` -&gt; `bin_recursive(1) + '1'` -&gt; `bin_recursive(0) + '1'` - 因为`bin_recursive(0)`返回空字符串,所以结果是`'1101'`。 递归...

    Rational Interger

    在IT领域,"Rational Interger" 这个术语似乎没有特定的标准定义,但我们可以从其组成部分进行推测。"Rational"通常与有理数有关,而在编程或数学上下文中,有理数指的是可以表示为两个整数比例的数。"Interger" ...

    pls_interger 和binary_integer的区别与多种数据类型说明

    数字类型可以分为三种基本类型:NUMBER、PLS_INTEGER 和 BINARY_INTEGER。 * NUMBER:以十进制格式进行存储,能够描述整数或实数。定义方式为 NUMBER(P,S),P 是精度,最大 38 位,S 是刻度范围, 可以在 -84......

    Integer Programming: The Cutting Plane Method

    2. 新不等式能够切断原始分数解x*,即αTx* &gt; β。如果不满足这一点,那么添加新不等式将无法帮助我们找到新的最优解,LP松弛问题仍会返回x*。 满足以上条件的不等式被称为整数规划的切割平面。一旦找到了切割平面...

    JAVA Integer类型自加实例详解

    1: invokespecial #1 // Method java/lang/Object."&lt;init&gt;":()V 4: return public void test(); Code: 0: iconst_1 1: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 4: a...

    AD10快捷键

    * File-&gt;New-&gt;Project-&gt;Interger Library * 新建 sch.lib 和 pcb.lib, 在 sch.lib 中选择 Tools-&gt;Model Manage.... * Project-&gt;Compile Integrated Library ### 其他 * 盲孔(BI) * 选择该元件,按 F1 打开该...

    VHDL时钟倍频的设计

    CLKFX_DIVIDE =&gt; 1, -- Can be any interger from 1 to 32 CLKFX_MULTIPLY =&gt; 2, -- Can be any integer from 1 to 32 CLKIN_DIVIDE_BY_2 =&gt; FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature CLKIN...

    JSONEditor解读.docx

    * input_height:显示设置输入元素的高度,取值应是一个有效的CSS高度字符串,适用于string、number、interger数据类型。 * input_width:显示设置输入元素的宽度,取值应是一个有效的CSS宽度字符串,适用于string、...

    61850模型及报文分析

    61850 模型及报文分析 61850 是 IEC(International Electrotechnical Commission,国际电工委员会)发布的一种智能电网通讯协议标准,用于智能电网中的数据交换和控制。该标准定义了电力系统中的设备之间的通讯...

    leetcode切割分组-leetcode:leetcode

    136_single_number.py # 位操作:异或(xor)操作 x ^ 0 = x; x ^ x = 0 sum 001_two_sum.py # 求list中能加和成指定值的两个位置 015_3_sum**.py # 求list中能加和成0的三个值 数列 004_median_of_two_sorted_arrays....

    SQL语法大全

    &lt;%@ language=VBscript%&gt; &lt;% dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=...

    JAVA认证考试题目

    题目中指出`interger`不是Java关键字,实际上应该是`integer`,Java的关键字是`int`。 2. 数据类型的转换与赋值:题目中提到的`byte b=256`会产生溢出错误,因为byte的范围是-128到127;`double d=89L`是合法的,...

    记录Integer 自动装包拆包代码解析

    记录Integer 自动装包拆包代码解析Integer 核心代码IntegerCache 类valueOf方法 Integer 核心代码 1、自动装拆箱 编译前 public static void main(String[]args){ Integer integer=1; //装箱 int i=integer;...

    java部分试题(适用于初学者考试使用)

    5. **集合框架的顶层接口**:在Java集合框架中,`Collection`接口位于顶层,它是`List`, `Set`, `Queue`等接口的父接口。所以正确答案是B) `Collection`。 6. **char类型的赋值**:Java的`char`类型可以存储单个...

    AD9 快捷键使用与提高

    集成库的建立涉及"File--&gt;New--&gt;Project--&gt;Interger Library",并使用"Model Manager"管理模型。 盲孔(Blind Via)是只延伸到一个表层的导通孔,通常用于连接顶层和内层,但不穿透整个PCB,这是在设计多层PCB时...

    labview使用技巧

    free interger 等等,所以存这样的应用还是挺合适的。 八、vi property 下 execution 中选项 reetrant execution,选用和不选用有什么区别? 如果主程序执行同一个子 vi,是同时两次或多次执行时,在不选用时,就...

    CameraPlacement:使用MATLAB中的二进制整数编程的三维相机放置解决方案

    CameraPlacement 使用MATLAB中的Binary Integer Programming的三维相机放置解决方案。 在先前的工作启发下,该程序使用二进制整数编程对AGP(艺廊问题)进行建模,并将其扩展为三个维度,以使其在现实世界中更加实用...

Global site tag (gtag.js) - Google Analytics