`
linxizeng
  • 浏览: 105296 次
  • 性别: 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等操作.
分享到:
评论

相关推荐

    把excel导入List中行也为list

    List&lt;List&lt;String&gt;&gt; dataList = new ArrayList&lt;&gt;(); Iterator&lt;Row&gt; rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); if (row.getRowNum() == 0) { // 跳过...

    使用连接池来进行数据库连接的具体步骤

    &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:oracle:thin:@...

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

    Digester笔记

    &lt;password&gt;tiger&lt;/password&gt; &lt;/datasource&gt; &lt;/datasources&gt; ``` #### 文件结构分析 这个XML文件具有两层结构: 1. `&lt;datasources&gt;`节点,其中包含两个`&lt;datasource&gt;`子节点。 2. 每个`&lt;datasource&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类...

    ipmitools-help.docx

    ipmitool [-c|-h|-v|-V] -I lan -H &lt;hostname&gt; [-p &lt;port&gt;] [-U &lt;username&gt;] [-A &lt;authtype&gt;] [-L &lt;privlvl&gt;] [-a|-E|-P|-f &lt;password&gt;] [-o &lt;oemtype&gt;] &lt;command&gt; ``` 在这里,`-I lan` 表示使用IPMI v1.5的LAN...

    润乾报表4.0在J2EE下的部署

    &lt;password&gt;tiger&lt;/password&gt; &lt;/dataSource&gt; &lt;cacheStrategy&gt; &lt;type&gt;file&lt;/type&gt; &lt;path&gt;/tmp/reportCache&lt;/path&gt; &lt;/cacheStrategy&gt; &lt;/config&gt; ``` **3. 报表缓存配置** 报表缓存对于提高报表查询性能至关重要...

    Digester 实例

    &lt;password&gt;tiger&lt;/password&gt; &lt;/datasource&gt; &lt;/datasources&gt; ``` ##### 2. 实现步骤 ###### (1) 定义数据模型 为了存储从 XML 文件中读取的数据,我们首先定义一个 `DataSource` 类: ```java public class ...

    由Excel文件的Sheet导出至List

    List&lt;List&lt;String&gt;&gt; data = new ArrayList&lt;&gt;(); for (Row row : sheet) { List&lt;String&gt; rowData = new ArrayList&lt;&gt;(); for (Cell cell : row) { String cellValue = getCellValue(cell); rowData.add...

    java连接数据库大全

    第一列为: &lt;%= rs.getString(1) %&gt; &lt;br&gt; 第二列为: &lt;%= rs.getString(2) %&gt; &lt;br&gt; &lt;% } out.print("数据库连接成功!"); } catch (Exception e) { e.printStackTrace(); } %&gt; &lt;/body&gt; &lt;/html&gt; ``` ##### 2. SQL...

    Jsp中调用Oracle存储过程的小例子

    out.println("&lt;tr&gt;&lt;td&gt;" + rs.getString(1) + "&lt;/td&gt;&lt;td&gt;" + rs.getString(2) + "&lt;/td&gt;&lt;/tr&gt;"); } rs.close(); stmt.close(); conn.close(); %&gt; &lt;/table&gt; &lt;p&gt;&lt;%out.print(conn.isClosed());%&gt;&lt;/body&gt; &lt;/html&gt; ...

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

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

    Jsp连结数据库大全.doc

    这里的URL格式是`jdbc:microsoft:sqlserver://&lt;主机&gt;:&lt;端口&gt;;DatabaseName=&lt;数据库名&gt;`,`pubs`是数据库名。 最后,我们讨论如何使用JSP连接到DB2数据库。在`testdb2.jsp`中,代码如下: ```jsp &lt;%@ page ...

    Oracle数据库命令操作.docx

    - `CREATE TABLE &lt;新表名&gt; AS SELECT * FROM &lt;旧表名&gt;;` - **示例**: - `CREATE TABLE EMP AS SELECT * FROM SCOTT.EMP;` - `CREATE TABLE DEPT AS SELECT * FROM SCOTT.DEPT;` - `CREATE TABLE SALGRADES AS ...

    tiger

    结合"tiger-main"这个文件名,这可能是项目的主要HTML文件,通常包含整个网页结构的根元素`&lt;html&gt;`,以及`&lt;head&gt;`和`&lt;body&gt;`部分。在`&lt;head&gt;`中,可能会有元数据(metadata)、样式链接(`&lt;link&gt;`标签引用外部CSS...

    SSH2集成技术

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

    数据库系统原理学习资料

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

    jsp连接数据库大全

    &lt;% String password = "tiger"; %&gt; &lt;% Connection conn = DriverManager.getConnection(url, user, password); %&gt; &lt;% Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR...

    老虎踪影

    例如,`&lt;div class="tiger"&gt;`创建一个分组,并用类名“tiger”标识。 3. **链接和图像**:`&lt;a&gt;`元素用于创建超链接,可以指向其他网页或文件。`&lt;img&gt;`元素插入图像,`src`属性指定图像源,`alt`属性提供替代文本。 ...

    动物学2

    &lt;input type="radio" id="question1c" name="question1" value="tiger"&gt; &lt;label for="question1c"&gt;老虎&lt;/label&gt;&lt;br&gt; &lt;button type="submit"&gt;提交&lt;/button&gt; &lt;/form&gt; &lt;/footer&gt; ``` 最后,通过引入JavaScript和...

Global site tag (gtag.js) - Google Analytics