• 关于Java擦除特性


     1 package thinkingInJava;
     2 /*
     3  * 模拟擦除
     4  */
     5 public class SimpleHolder {
     6     
     7     private Object obj ;
     8     public void set(Object o ){
     9         obj = o ;
    10     }
    11     public Object get(){
    12         return obj ;
    13     }
    14     public static void main(String[] args) {
    15         // 如果该类使用了泛型参数,并且这个obj变量类型就是这个泛型参数表示的类型,那么当构造这个类的对象的时候会自动擦除类型信息,
    16         // 对于有非泛型上界的变量类型转换成对应的非泛型上界,没有指定的则转换成Object
    17         SimpleHolder demo = new SimpleHolder() ;
    18         // 在运行时编译器丢到了所有的类型信息,所以set方法参数即使使用了泛型也不会起作用,
    19         // 而是将其转换成器非泛型上界,但是在对象进入时(通过泛型设置值)会判断这个对象与泛型的一致性
    20         demo.set("xxx") ;
    21         // 当然获取时也是获取的对应非泛型上界类型的值。但是编译器会自动插入强制类型转换的代码
    22         String x = (String) demo.get() ;
    23     }
    24 }
    package thinkingInJava;
    /*
     * 使用泛型版本
     */
    public class GenericHolder<T> {
    	private T obj ;
    	public void set(T t ){
    		this.obj = t ;
    	}
    	public T get(){
    		return obj ;
    	}
    	public static void main(String[] args) {
    		GenericHolder<String> demo = new GenericHolder<String>() ;
    		//demo.set(new Object()); 虽然在运行时丢到了所有的类型信息,但是编译器仍然会保证传递进去的参数与泛型一致
    		demo.set("hello ") ;
    		String x = demo.get() ; // 出来时编译器自动插入强制类型转换代码
    	}
    }
    

      

  • 相关阅读:
    mkdosfs 安装
    块设备驱动程序-内存盘
    usb驱动程序小结(六)
    usb的hid鼠标键盘报告描述符(五)
    usb输入子系统写程序(三)
    usb输入子系统键盘(四)
    usb描述符简述(二)
    linux usb总线驱动(一)
    linux 触摸屏驱动
    lcd驱动框架
  • 原文地址:https://www.cnblogs.com/caiyao/p/4403567.html
Copyright © 2020-2023  润新知