`
cakin24
  • 浏览: 1335274 次
  • 性别: 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区别

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

    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. 文字 ...

    Rational Interger

    Rational Interger

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

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

    LeetCode Reverse Interger 题目解决方案

    LeetCode Reverse Interger 题目解决方案

    Interger-to-binary.rar_binary interger

    该程序实现整数到二进制的转换,主要体现递归的思想。

    python基础教程:Counter类.pdf

    创建 下⾯的代码说明了Counter类创建的四种⽅法: &gt;&gt;&gt; c = Counter() # 创建⼀个空的Counter类 &gt;&gt;&gt; c = Counter('gallahad') # 从⼀个可iterable对象(list、tuple、dict、字符串等)创建 &gt;&gt;&gt; c = Counter({'a': 4, ...

    Integer Programming: The Cutting Plane Method

    UIUC Math 482: Linear Programming1, Lecture 34: The Cutting Plane Method. Mikhail Lavrov

    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...

    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=...

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

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

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

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

    ADC相关参数之---INL和DNL - raymon_tec - 博客园.html

    模数器件的精度指标是用积分非线性度(Interger NonLiner)即INL值来表示。也有的器件手册用 Linearity error 来表示。他表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。也就是...

    mybatis逆向工具generator,中文注释,Byte改Integer

    mybatis逆向工具generator,中文注释,把自动生成的Byte改成了Integer

    integer:验证值是否为整数

    整数 验证值是否为整数。 安装 $ npm install validate.io-integer 要在浏览器中使用,请使用 。 用法 var isInteger = require ( 'validate.io-integer' ) ; isInteger( 值 ) 验证值是否为integer 。...

    某科大高级计算机体系结构作业-Scoreboarding计分板模拟器,使用python实现

    五个功能单元:Interger、Mult1、Mult2、Add、Divide,使用busy、Op、dest、src1、src2、等待表示其状态; 默认先读寄存器后半周期写回 功能:打印显示每周期的状态以及5个单元部件的使用信息;

    New-folder-(2).zip_Different

    multiplication of real and imag part by interger different function

    electron-calculator:测试现代工具的计算器练习

    它可以处理Number.MIN_SAFE_INTERGER和Number.MAX_SAFE_INTEGER之间的数字 它支持键盘快捷键: c-清除 Esc-退出程序 您可以在程序窗口中执行以下操作: 最小化窗口 最大化窗口 最大化窗口 关上窗户 它具有自定义...

    DSA-Theory-Concept:DSA的理论概念

    这些是编程语言Ex-Interger,float,char,boolean专有的数据结构非原始数据结构:可以分为两种类型:-&gt;物理数据结构:数组,链接列表-&gt;逻辑数据结构:树,堆栈,队列,图逻辑ds具有概念,但是实现基于以下任何一种...

Global site tag (gtag.js) - Google Analytics