`
linxizeng
  • 浏览: 102285 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tiger学习 之 类型转换<generic>

阅读更多
了解一个概念 擦除(erasure)
    泛型基本上完全在编译器中实现,由编译器执行的时候类型检查和类型推断,保证类型安全,然后生成普通的非泛型的字节码(然后在生成字节码之前将其清除,使其跟不用泛型的写法生成的字节代码基本一样)。这种实现技术 -- 擦除(erasure)

泛型的转换是基于对象本身的基础类型的,而不是基于泛型的参数化,所以
引用

List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);

List<Integer> list2 = list1;


是基于list1 转换的,不是基于Interger转换,这样写OK!但如果这样写
引用

List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);

List<Number> list2 = list1;

呵呵,很明显,编译器提示错误,但是如果这样

引用

List<Integer> list1 = new ArrayList<Integer>();
List list2 = list1;
list2.add("Hello");
Integer i = list1.get(0);
//编译器不会提示错误,在运行时会抛出 Exception in thread "main" java.lang.ClassCastException: java.lang.String 异常!



所以泛型的类型转换需要注意

通配符 --- "?" 为了配合可以接受类型的参数化..

为什么这段代码这样写
引用


List<Integer> list1 = new ArrayList<Integer>();
setList(list1);

public static void setList(List<?> list) {

}

"?"可以用Object代替吗?NO!前面说过,类型转换是有问题的...

but,经过通配符的对象之后,只能是只读的了,拒绝List<?>的add,set等操作.
分享到:
评论

相关推荐

    tomcat 配置数据源

    &lt;value&gt;tiger&lt;/value&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;name&gt;driverClassName&lt;/name&gt; &lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;name&gt;url&lt;/name&gt; &lt;value&gt;jdbc:...

    javaSSH整合

    &lt;property name="password" value="tiger"&gt;&lt;/property&gt; &lt;/bean&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; &lt;property name="dataSource"&gt; &lt;ref...

    把excel导入List中行也为list

    把excel导入List中行也为list 结果为 list&lt;list&lt;String&gt;&gt;的集合

    DBKING使用指南

    dbking 0.6&lt;br&gt; ==========&lt;br&gt; &lt;br&gt; dbking是一款基于Java的数据库处理工具集,主要包括三项主要内容:&lt;br&gt; 1、为各类数据库提供统一的操作接口,尽最大可能保障各类数据库之间的移植性&lt;br&gt; 2、通过生成器创建BO类...

    Cocoa Programming Tutorial on Tiger(繁体中文版)

    該程式會 &lt;br&gt;根據使用者所選擇之來源檔的相關資訊(Metadata)來搜尋系統中類似的檔案。這是一 &lt;br&gt;個較繁複的導覽,需要一點耐心(耗時約3小時)但相對地也介紹比較多概念與主題。作者 &lt;br&gt;希望透過這篇文章吸引更多人...

    ORACLE 常見問題

    Oracle安裝完成后的初始口令?&lt;br&gt; internal/oracle&lt;br&gt; sys/change_on_install&lt;br&gt; system/manager&lt;br&gt; scott/tiger&lt;br&gt; sysman/oem_temp&lt;br&gt;

    超强文件“指纹”校验机 HashCalc V2.02

    随便建立一文本文档,输入你校验所得的文件名和校验值,例如:&lt;br&gt;7158afedbd4ffcf806a5547434f8083d *HashCalc_yfy.exe&lt;br&gt;然后打开“文件——&gt;另存为”菜单,在弹出的对话框中的“保存类型”下拉框中选择“所有...

    数据库系统原理学习资料

    CREATE ROLE &lt;角色名&gt; IDENTIFIED BY &lt;口令&gt; 注意:角色名必须唯一,不能与数据库其它角色或用户同名。 角色刚建完时,没有与之联系的任何权限或其它角色。 创建角色时也可不带有口令。 将权限授予创建的角色,将...

    jsp连接数据库大全

    &lt;%@ page import="java.sql.*"%&gt; &lt;html&gt; &lt;body&gt; &lt;%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为你的数据库的SID String ...

    plume:Plume是一个代码属性图分析库,具有从Java字节码中提取CPG并将结果存储在各种图数据库中的选项

    &lt; groupId&gt;io.github.plume-oss&lt;/ groupId&gt; &lt; artifactId&gt;plume&lt;/ artifactId&gt; &lt; version&gt;X.X.X&lt;/ version&gt; &lt; type&gt;pom&lt;/ type&gt; &lt;/ dependency&gt; Gradle: implementation ' io.github.plume-oss:plume:X.X.X ' ...

    Java 5.0 Tiger程序高手秘笈(Part_2)

    Java 5.0 TIiger程序高手秘笈.pdf&lt;br&gt;下载两个压缩包后双击其中一个,就打开了

    dumpregister使用说明.docx

    dumpregister使用说明.docx

    C#通用数据库访问类 常用6种数据库VS2008

    --&lt;add key="typeName" value="Common.DataAccess.OracleDbOperator"/&gt;--&gt;&lt;!-- Oracle方式 --&gt; &lt;!--&lt;add key="typeName" value="Common.DataAccess.OleDBOperator"/&gt;--&gt;&lt;!-- Access(兼容)方式 --&gt; &lt;/configuration...

    .net 通用数据库访问类(优化版)源码

    --&lt;add key="typeName" value="Common.DataAccess.OracleDbOperator"/&gt;--&gt;&lt;!-- Oracle方式 --&gt; &lt;!--&lt;add key="typeName" value="Common.DataAccess.OleDBOperator"/&gt;--&gt;&lt;!-- Access(兼容)方式 --&gt; &lt;/configuration...

    Tiger:CS4240 Tiger 编译器项目

    去做:阶段1 初始寄存器分配 检测..../tiger.sh [options] &lt; tiger&gt; 完整的选项列表$ ./tiger.sh --help干净的$ ./clean.sh目录结构xxx 学分(c) 2014 阿卡什·甘吉尔、泰勒·贝尔、布兰登·查斯坦。 麻省理工学院执照

    VS2010访问 oracle数据库的例子(EMP表)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.... Response.Write("&lt;table bgcolor = #fff000&gt;"); Response.Write("&lt;tr&gt;");

    JAVA 5.0 TIGER程序高手秘笈

    JAVA 5.0 TIGER程序高手秘笈.pdf&lt;br/&gt;

    0racle查询

    * 常见的基本条件运算关系运算符:&lt;,&gt;,&gt;=,&lt;=,&lt;&gt;(&lt;&gt;),BETWEEN...AND...,LIKE,IN,IS NULL,OR,NOT; 通过这些知识点,我们可以更好地理解和使用 Oracle 查询语言,提高数据库的查询效率和数据安全性。

    JAVA 5.0 TIGER程序高手秘笈.rar

    JAVA 5.0 TIGER程序高手秘笈 generic enumerated类型 autboxing和unboxing verarg annotation for/in语句等等

    FCKEDIT和定时器

    &lt;script type="text/javascript" src="/class14a/admin/fckeditor/fckeditor.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; window.onload = function() { var oFCKeditor = new FCKeditor( 'content' ) ; ...

Global site tag (gtag.js) - Google Analytics