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

浅谈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指定类型!

相关推荐

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...

    深入浅出.NET泛型编程

    泛型可以理解为一种参数化类型,允许在定义类、接口和方法时使用类型参数,这些类型参数在实际使用时会被具体的类型替换。在.NET中,泛型的实现与C++的模板不同,但都提供了模板化的功能。泛型不仅提供了类型安全,...

    泛型generics.zip

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

    深入Java:Generics泛型

    引入泛型后的`Holder2`,如示例所示,通过类型参数`T`实现了对存储类型的约束,确保了在实例化时只能存储指定类型的对象。在`Holder2&lt;Automobile&gt;`中,`T`被替换为`Automobile`,这样容器就只能存储`Automobile`实例...

    [Java泛型和集合].(Java.Generics.and.Collections).文字版

    4. **泛型方法和类型参数化类**:如何定义和使用泛型方法和泛型类。 5. **类型安全的迭代器**:如何利用泛型提高迭代器的安全性。 6. **协变和逆变**:理解如何在泛型中实现类型参数的协变和逆变。 7. **比较和...

    基于泛型与反射的万能数据库操作代码

    **泛型(Generics)** 泛型是Java SE 5.0引入的一个新特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。在数据库操作中,泛型可以帮助我们创建一个通用的Dao(Data ...

    泛型java的泛型知识,非常有用

    - 类如 `class Java_Generics,V&gt;`,`K` 和 `V` 就是类型参数,类似于函数中的变量,它们在实例化时会被具体的类型替换。 - 示例中,`TestGen0, String&gt;` 就是泛型类的具体实例,其中 `K` 被替换为 `String`,`V` ...

    Generics_in_the_Java_Programming_Language译文

    2. 代码重用:泛型可以将类型参数化,使得代码可以应用于多种类型。 3. 代码简洁:泛型可以减少类型转换的代码,使得代码更加简洁。 泛型的基本概念: 1. 类型参数:泛型的核心概念是类型参数,例如 List&lt;E&gt; 中的 ...

    java 泛型的使用 详细讲解

    泛型(Generics)是指在面向对象编程中,通过参数化类型来达到类型重用的目的。通俗地说,就是将类或方法中的某些类型定义为参数形式,在实际使用时再传入具体类型的机制。 ##### 2.2 为什么使用泛型? 1. **类型...

    泛型编程小实例(以List为例)

    泛型(Generics)是一种在编程中引入的模板机制,用于在定义数据结构或方法时创建类型参数。这些参数可以在实例化时替换为具体的类型,使得容器(如List、Set、Map等)能够存储特定类型的元素,而不是任意类型。...

    泛型JAVA指南.pdf

    泛型允许在定义类、接口和方法时参数化类型,这意味着可以在不丧失类型安全性的前提下,编写可重用的代码。本指南旨在详细解释泛型的概念,并通过示例展示泛型的具体应用。 泛型允许我们创建可以操作多种数据类型的...

    java中的泛型-详细

    方法的泛型参数独立于类的泛型参数,允许方法具有特定的类型约束,增强方法的灵活性和安全性。 总的来说,Java泛型提供了一种强大的工具,让开发者能够编写更加安全、灵活且可复用的代码。它简化了类型转换,增强了...

    Java泛型和集合-英文版

    4. 泛型方法和可变参数(Generic Methods and Varargs):泛型方法允许在方法级别上指定泛型参数,这与类级别的泛型不同。可变参数(Varargs)是Java的一个特性,允许开发者创建接受可变数量参数的方法。在泛型方法...

    JDK1.5的泛型实现

    泛型是参数化类型的一种形式,允许在定义类、接口和方法时使用类型参数。类型参数就像是一个占位符,代表了某种未知的类型。在实例化泛型类或调用泛型方法时,我们可以指定具体的类型,将这些占位符替换为实际的类型...

    Java1.5泛型指南中文版

    Java 1.5引入了泛型(Generics)的概念,这是一个重要的语言特性,它允许开发者在编译时期指定集合或其他数据结构中的元素类型,从而避免了运行时期的类型转换错误。通过使用泛型,开发者可以在编程阶段就确保类型的...

    泛型和方法

    在Java编程语言中,泛型(Generics)和方法是两个重要的概念,它们极大地提高了代码的类型安全性和可重用性。这篇博文将探讨这两个主题,并结合源码和工具进行深入解析。 首先,泛型是Java 5引入的一项重要特性,它...

    面试必须资料java泛型攻略、

    Java泛型(Generics)是一种在编译时确保类型安全的机制,它允许程序员编写类型安全的通用类或方法,而无需进行显式的类型转换。在Java 1.5引入泛型之前,集合类(如`ArrayList`)只能存储`Object`类型的元素。这...

Global site tag (gtag.js) - Google Analytics