本文由广州疯狂软件java培训为你整理:

package cn.enhance.newfeature;

 

import java.util.ArrayList;

import java.util.Collection;

import java.util.Vector;

 

/*

 * jdk1.5的新特性

 *         泛型

 * 泛型是给javac编译器使用的,编译完成后的class文件中去掉了泛型限定,我们可以用反射从字节码中获取方法操作集合跳过处于编译时期的泛型限定。

 *

 * 泛型术语:

 * ArrayList :     原始类型

 * ArrayList<E> : 泛型类型

 * ArrayList<String>: 参数化的类型

 * ArrayList<E> : E --> 类型变量或类型参数,类型参数不能为基本数据类型,可以为基本数据类型的包装类

 * ArrayList<String>: String --> 类型参数的实例或实际类型参数

 * ArrayList<String>: <> --> 念做typeof

 *

 * 参数化的类型可以引用一个原始类型,原始类型也可以引用一个参数化的类型。

 * 参数化类型不考虑参数的继承关系。

 * 创建数组实例时,数组的元素不能使用参数化的类型,但可以使用原始类型。

 *

 */

public class GenericityTest1 {

       public static void main(String[] args) throws Exception {

              genericityDemo1();

              genericityDemo2();

       }

       // 泛型使用于编译时期

       private static void genericityDemo1() throws Exception {

              // 由于泛型限定,编译器只允许往集合中添加与类型参数一样的类型数据

              Collection<String> colls = new ArrayList<String>();

              colls.add("abc");

              colls.add("def");

              // colls.add(5);

// 用反射获取集合的add方法,往集合中添加元素,可以跳过编译器,不受泛型限定

              colls.getClass().getMethod("add", Object.class).invoke(colls, 5);

              // 编译完成后的class文件中去掉了泛型限定

              Vector<Integer> v1 = new Vector<Integer>();

              Vector<String> v2 = new Vector<String>();

              System.out.println(v1.getClass().getName());

              System.out.println(v2.getClass().getName());

              System.out.println(v1.getClass() == v1.getClass());

       }

       // 参数化类型与原始类型的兼容性

       private static void genericityDemo2() {

              // 参数化的类型可以引用一个原始类型

              Collection<String> colls1 = new ArrayList();

              // 原始类型可以引用一个参数化的类型

              Collection colls2 = new ArrayList<String>();

              // 编译不会出错

              Vector v = new Vector<String>();

              Vector<Integer> v1 = v;

              // 参数化类型不考虑参数的继承关系

              // Collection<String> colls3 = new ArrayList<Object>();

              // Collection<Object> colls4 = new ArrayList<String>();

              // 创建数组实例时,数组的元素不能使用参数化的类型

              // Vector<Integer>[] v2 = new Vector<Integer>[10];

              // 数组的元素可以使用原始类型

              Vector[] v3 = new Vector[10];

              Collection colls[] = new ArrayList[10];

       }

}

学IT技术就学Java技术,疯狂软件Java培训机构,打造国内高级Java人才。

  疯狂软件Java培训优势

  1. Java是世界第一大编程语言,市场占有率达20%。

  2.广州最专业Java培训机构,多年教学经验。

  3.学员技术牛就业率最好,就业薪资都在5000以上。

  4.疯狂软件Java培训课程以项目实战带动教学,上课打破传统课堂模式,以实训项目贯穿教学,带领学生一起做企业真实项目。

  疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。高薪从IT名企请来项目经理为学员亲自授课,对学员进行实战教学,在疯狂java,通过大量全真经典企业级项目进行集中培训,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!