关于Java泛型的一些问题

本文详细解析了Java泛型的概念及其在编译时的类型安全验证过程,同时探讨了运行时如何忽略这些类型信息,以及类型转换带来的潜在风险。通过实例演示了泛型如何在编译期确保类型安全,以及在运行时如何实现类型转换。


package com.wangbiao.generic;

import java.util.ArrayList;
import java.util.List;

/**
 * @Title: GenericPrinciple.java
 * @Package com.wangbiao.generic
 * @Description: Java Generic function well at compile time ,but will be removed after compile time
 * @author wangbiao
 * @date 2014-12-18 下午5:33:36 
 * @version V1.0
 */
public class GenericPrinciple {
    
    
    //this is an exception, it will compile error at compile
    // compile error
    public void print(List<String> list){
        //TODO
    }
    
    // compile error
    public void print(List<Integer> list){
        //TODO
    }
    

    public static void main(String[] args) {
        
        List list = new ArrayList();
        List<String> list_string = new ArrayList<String>();
        List<Integer> list_integer = new ArrayList<Integer>();
        
        // Compiler will check the parameter type to avoid type mismatch problem in compile time 
        //list_string.add(1234);
        
        /**
         *      这几个变量字节码都是一样的
                0  new java.util.ArrayList [16]
                 3  dup
                 4  invokespecial java.util.ArrayList() [18]
                 7  astore_1 [list]
                 8  new java.util.ArrayList [16]
                11  dup
                12  invokespecial java.util.ArrayList() [18]
                15  astore_2 [list_string]
                16  new java.util.ArrayList [16]
                19  dup
                20  invokespecial java.util.ArrayList() [18]
                23  astore_3 [list_integer]
         * 
         */
        
        // result is true. this means generic is ignored at run time.
        System.out.println(list.getClass() == list_string.getClass() && list_string.getClass() == list_integer.getClass());
        
    
    }
    
    

}


转载于:https://my.oschina.net/u/617909/blog/357725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值