`
noname365
  • 浏览: 132607 次
社区版块
存档分类
最新评论

浅谈Generics(泛型、参数化类型)

阅读更多
        在Java5中,引入了Generics(泛型、参数化类型)的概念。泛型允许编写可作用于任意类型的类,但直到声明类的实例时,才指定特定的类型。因为此类型不是作为类定义的一部分而指定的,所以该类成为一般的、获得对任意指定的类型起作用的能力。这个概念应该偷师于.Net。
        下面通过集合类的使用展示一下泛型的优点:
        List list = new ArrayList();                                                                  List<integer> list =  new ArrayList<integer>();</integer></integer>
        list.add(Integer.valueOf(1));                                                              list.add(Integer.valueOf(1));
        list.add(Integer.valueOf(2));                                                              list.add(Integer.valueOf(2));
        for(int i=0;i<list.size();i++)                                                                  for(int i=0;i<list.size();i++)              Integer myInteger = (Integer)list.get(i);                                            Integer myInteger = list.get(i);
              System.out.println(myInteger.intValue());                                       System.out.println(myInteger.intValue());
        }                                                                                                               }
        上面红色部分的代码是Java5以前的代码,蓝色是Java5以后的代码,通过对比会发现,在Java5以后,泛型给Java增加了额外的安全性,因此在访问元素时也不再需要进行强制类型转换。同时使程序具有可读性。当然上面的程序如果利用增强的for循环、自动装箱/拆卸机制,代码将更优雅。但这是通过编译器完成的,下面通过代码进行证明:
interface Animal{                                                                                         public class Dog implements Animal{
    public void walk();                                                                                      public void walk() {
                                                                                                                             System.out.println("四条腿走路");
                                                                                                                           }
}                                                                                                                      }
public class Test {
    public static <t> void walk(T animal){
        animal.draw();//将发生编译错误,如果修改为:animal.toString();代码将正常。
    }
}
        通过上面的代码,发现实际参数化类型最终会变成Object类型。这导致了一个问题:Java是强类型语言,而泛型阻碍了强类型化。有点前后不一致的感觉,但这也是为了程序的可移植性。相信伴随着Java的开源、发展,这些问题将会得到解决。</t>
分享到:
评论
1 楼 zhangguoli1997 2007-11-30  
你的理解有问题!“发现实际参数化类型最终会变成Object类型”
animal.draw();//将发生编译错误,如果修改为:animal.toString();代码将正常。
    }
造成这个的原因是因为你没有为T指定类型!

相关推荐

    泛型generics.zip

    泛型(Generics)是JDK5引入的一种参数化类型特性。它提供了编译时类型安全检测机制。其本质是参数类型,所操控的数据类型被指定为一个参数。泛型不存在于JVM虚拟机。泛型学习、泛型限定类型、泛型通配符、泛型继承。...

    java泛型解析

    泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值...

    java泛型详解

    泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值...

    java-generics-collections:Java核心中的泛型和集合

    泛型格式化参数化数据类型,以便我们可以将类,接口或方法用于许多不同的数据类型。 集合只是具有相同数据类型的对象的集合,具体取决于结构,存储和安排这些对象的方式,我们将它们分为以下几类: 大批 收藏 ...

    深入理解Kotlin的泛型系统

    泛型(Generics)其实就是把类型参数化,真正的名字叫做 类型参数,它给强类型编程语言加入了更强的灵活性。在 Java 中,只要是有类型的 API 元素,都可以泛型化,也就是泛型类、泛型接口、泛型方法和泛型属性,泛型...

    C# 泛型的简单理解(安全、集合、方法、约束、继承)分享

    前言 泛型允许你在编译时实现类型安全。它们允许你创建一个数据结构而不限于一特定的数据类型。...为使用它们,只需简单地指定参数化的类型即可。 代码如下:ArrayList array = new ArrayList(); arra

    Java-Generics-and-Collections-2:Java Generics and Collections Java泛型和集合

    2.6 通配符与类型参数 2.7 通配符捕获 2.8 对通配符的限制 第三章(集合类) 3.1 可比较的 3.2 集合的最大值 3.3 水果相关示例 3.4 比较 3.5 枚举类型 3.6 多重界限 3.7 桥接器 3.8 协变覆盖 第四章(声明) 4.1 构造...

    CLR via C# 3rd Edition

    新增讨论了委托和接口泛型类型参数的不同。 Chapter 13-Interfaces 无新话题。 Part III – Essential Types Chapter 14-Chars, Strings, and Working with Text 无新话题。 Chapter 15-Enums 新增了枚举和...

    asp.net知识库

    泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略...

    ASP.NET2.0高级编程(第4版)1/6

    4.5.3 使用带参数的回调功能110 4.6 小结113 第5章 ASP.NET Web服务器控件115 5.1 Web服务器控件概述115 5.2 Label服务器控件116 5.3 Literal服务器控件118 5.4 TextBox服务器控件119 5.4.1 使用Focus()方法120 ...

    @SuppressWarnings

    )下面是一个清单: 关键字 用途 deprecation 使用了不赞成使用的类或方法时的警告 unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 fallthrough 当 Switch ...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan ...15.2.5 为个性化属性定义类型 514 15.2.6 使用定制的类型 515 ...

Global site tag (gtag.js) - Google Analytics