• 黑马程序员java泛型


    泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序院校效率不受影响。对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只用能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如,用反射得到集合,再调用其add方法即可。
    ArrayList<String> collection2=new ArrayList<String>(); ArrayList<Integer> collection3=new ArrayList<Integer>();
    System.out.println(collection2.getClass()==collection3.getClass());
    结果为true

    ArrayList<Integer> collection3=new ArrayList<Integer>(); collection3.getClass().getMethod("add",Object.class).invoke(collection3,"abc");
    System.out.println(collection3.get(0));

    正常输出结果,结果为abc
    ArrayList<E>类定义和ArrayList<Integer>类引用涉及如下术语: 整个称为ArrayList<E>泛型类型 ArrayList<E>中的E称为类型变量或类型参数
    整个称为ArrayList<Integer>称为参数化的类型
    ArrayList<Integer>中的Integer称为类型参数的
    实例或实际类型参数 ArrayList<Integer>中的<>念typeof ArrayList称为原始类型
    参数化类型与原始类型的兼容性:
    参数化类型可以引用一个原始类型的对象,编译报告警告: Collection<String> c=new Vector(); 原始类型可以引用一个参数化类型的对象,编译报告警告: Collection c=new Vector<String>();
    参数化类型不考虑类型参数的继承关系
    Vector<String> v=new Vector<Object>();//错误
    Vector<Object> v=new Vector<String>();//错误
    泛型中的?通配符的扩展
    1、限定通配符的上边界   正确:Vector<? extends Number> x=new Vector<Integer>();   错误:Vector<? extends Number> x=new Vector<String>(); 2, 限定通配符的下边界    正确:Vector <? super Integer>x=new Vector<Number>();    错误:Vector <? super Integer>x=new Vector<Byte>();

    编写一个泛型方法,自动将Object类型的对象转换成String. Object obj="abc"; String x3=autoConvert(obj); private static <T> T autoConvert(Object obj){ return (T)obj; } 定义一个方法,可以将任意类型的数组的所有元素填充为相应类型的某个对象。
    private static <T> void fillArray(T[] a,T obj){ for (int i = 0; i < a.length; i++) { a[i]=obj; } } 采用自定义泛型方法的方式打印出任意参数化类型的集合中的所有内容。

    private static <T> void printCollection(Collection<T> collection2) { for (Object obj : collection2) { System.out.println(obj); } }

  • 相关阅读:
    MagicAjax.NET Framework
    实例说明sql优化的重要性
    求助:谁可以给我点share point 开发的资料
    整理了一些tsql技巧(收藏)
    熟悉/了解C#基础问题
    .NET在SQL Server中的图片存取技术(例子在管理里InOutImg)
    SQL Server 2000 函数使用CAST 和 CONVERT
    MagicAjax.NET Framework configuration
    找工作了,希望各位多多帮忙
    OSG节点访问和遍历
  • 原文地址:https://www.cnblogs.com/asher/p/2829533.html
Copyright © 2020-2023  润新知