<em id="lwy0s"></em>
      1. <div id="lwy0s"></div>
      2. AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
        Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
         首页 > JAVA编程

        Java&nbsp;泛型的理解与等价实现

        51自学网 2015-09-03 http://www.40288265.com
          泛型Java SE 1.5的新特性泛型的本质是参数化类型也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口?#22836;?#27861;的创建中分别称为泛型类、泛型接口、泛型方法。

          Java语言引入泛型的好处是安全简单。

          在Java SE 1.5之前没有泛型的情况的下通过对类型Object的引用来实现参数的^任意化?#20445;?#20219;意化 ̄带来的缺点是要做显式的强制类型转换而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况编译器可能不提示错误在运行的时候才出现异常这是一个安全隐患。

          泛型的好处是在编译的时候检查类型安全并且所有的强制转换都是自动和隐式的提高代码的重用率。

          泛型在使用中还有一些规则和限制

          1、泛型的类型参数只能是类类型包括自定义类不能是简单类型。

          2、同一种泛型可以对应多个版本因为参数类型是不确定的不同版本的泛型类实例是不兼容的。

          3、泛型的类型参数可以有多个。

          4、泛型的参数类型可以使用extends语句例如<T extends superclass>。习惯上成为^有界类型 ̄。

          5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);

          泛型还有接口、方法等等内容很多需要花费一番功夫才能理解掌握并熟练应用。在此给出?#20197;?#32463;了解泛型时候写出的两个例子根据看的印象写的实现同样的功能一个使用了泛型一个没有使用通过对比可以很快学会泛型的应用学会这个基本上学会了泛型70%的内容。

          例子一使用了泛型

        public class Gen<T> {
         private T ob; //定义泛型成员变量

         public Gen(T ob) {
          this.ob = ob;
         }

         public T getOb() {
          return ob;
         }

         public void setOb(T ob) {
          this.ob = ob;
         }

         public void showTyep() {
          System.out.println("T的实际类型是: " + ob.getClass().getName());
         }
        }

        public class GenDemo {
         public static void main(String[] args){
         //定义泛型类Gen的一个Integer版本
         Gen<Integer> intOb=new Gen<Integer>(88);
         intOb.showTyep();
         int i= intOb.getOb();
         System.out.println("value= " + i);

         System.out.println("----------------------------------");

         //定义泛型类Gen的一个String版本
         Gen<String> strOb=new Gen<String>("Hello Gen!");
         strOb.showTyep();
         String s=strOb.getOb();
         System.out.println("value= " + s);
        }
        }

          例子二?#22909;?#26377;使用泛型

        public class Gen2 {
         private Object ob; //定义一个通用类型成员

         public Gen2(Object ob) {
          this.ob = ob;
         }

         public Object getOb() {
          return ob;
         }

         public void setOb(Object ob) {
          this.ob = ob;
         }

         public void showTyep() {
          System.out.println("T的实际类型是: " + ob.getClass().getName());
         }
        }

        public class GenDemo2 {
         public static void main(String[] args) {
          //定义类Gen2的一个Integer版本
          Gen2 intOb = new Gen2(new Integer(88));
          intOb.showTyep();
          int i = (Integer) intOb.getOb();
          System.out.println("value= " + i);

          System.out.println("----------------------------------");

          //定义类Gen2的一个String版本
          Gen2 strOb = new Gen2("Hello Gen!");
          strOb.showTyep();
          String s = (String) strOb.getOb();
          System.out.println("value= " + s);
         }
        }

          运行结果

          两个例子运行Demo结果是相同的,控制台输出结果如下

          T的实际类型是:

        java.lang.Integer
        value= 88
        ----------------------------------
        T的实际类型是: java.lang.String
        value= Hello Gen!

        Process finished with exit code 0

          看明白这个以后基本的泛型应用和代码阅读就不成问题了。

         

         

         
        说明
        本教程来源互联网或网友上传或出版商仅为学习研究或?#25945;?#25512;广51zixue.net不保证资料的完整性。
         
        上一篇从网页源文件中得到链接  下一篇Java编程?#38469;?#20013;汉字问题的分析及解决
        臼奨11僉5室派

            <em id="lwy0s"></em>
          1. <div id="lwy0s"></div>

                <em id="lwy0s"></em>
              1. <div id="lwy0s"></div>