在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>
分享到:
相关推荐
在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...
泛型可以理解为一种参数化类型,允许在定义类、接口和方法时使用类型参数,这些类型参数在实际使用时会被具体的类型替换。在.NET中,泛型的实现与C++的模板不同,但都提供了模板化的功能。泛型不仅提供了类型安全,...
泛型(Generics)是JDK5引入的一种参数化类型特性。它提供了编译时类型安全检测机制。其本质是参数类型,所操控的数据类型被指定为一个参数。泛型不存在于JVM虚拟机。泛型学习、泛型限定类型、泛型通配符、泛型继承。...
引入泛型后的`Holder2`,如示例所示,通过类型参数`T`实现了对存储类型的约束,确保了在实例化时只能存储指定类型的对象。在`Holder2<Automobile>`中,`T`被替换为`Automobile`,这样容器就只能存储`Automobile`实例...
4. **泛型方法和类型参数化类**:如何定义和使用泛型方法和泛型类。 5. **类型安全的迭代器**:如何利用泛型提高迭代器的安全性。 6. **协变和逆变**:理解如何在泛型中实现类型参数的协变和逆变。 7. **比较和...
**泛型(Generics)** 泛型是Java SE 5.0引入的一个新特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。在数据库操作中,泛型可以帮助我们创建一个通用的Dao(Data ...
- 类如 `class Java_Generics,V>`,`K` 和 `V` 就是类型参数,类似于函数中的变量,它们在实例化时会被具体的类型替换。 - 示例中,`TestGen0, String>` 就是泛型类的具体实例,其中 `K` 被替换为 `String`,`V` ...
2. 代码重用:泛型可以将类型参数化,使得代码可以应用于多种类型。 3. 代码简洁:泛型可以减少类型转换的代码,使得代码更加简洁。 泛型的基本概念: 1. 类型参数:泛型的核心概念是类型参数,例如 List<E> 中的 ...
泛型(Generics)是指在面向对象编程中,通过参数化类型来达到类型重用的目的。通俗地说,就是将类或方法中的某些类型定义为参数形式,在实际使用时再传入具体类型的机制。 ##### 2.2 为什么使用泛型? 1. **类型...
泛型(Generics)是一种在编程中引入的模板机制,用于在定义数据结构或方法时创建类型参数。这些参数可以在实例化时替换为具体的类型,使得容器(如List、Set、Map等)能够存储特定类型的元素,而不是任意类型。...
泛型允许在定义类、接口和方法时参数化类型,这意味着可以在不丧失类型安全性的前提下,编写可重用的代码。本指南旨在详细解释泛型的概念,并通过示例展示泛型的具体应用。 泛型允许我们创建可以操作多种数据类型的...
方法的泛型参数独立于类的泛型参数,允许方法具有特定的类型约束,增强方法的灵活性和安全性。 总的来说,Java泛型提供了一种强大的工具,让开发者能够编写更加安全、灵活且可复用的代码。它简化了类型转换,增强了...
4. 泛型方法和可变参数(Generic Methods and Varargs):泛型方法允许在方法级别上指定泛型参数,这与类级别的泛型不同。可变参数(Varargs)是Java的一个特性,允许开发者创建接受可变数量参数的方法。在泛型方法...
泛型是参数化类型的一种形式,允许在定义类、接口和方法时使用类型参数。类型参数就像是一个占位符,代表了某种未知的类型。在实例化泛型类或调用泛型方法时,我们可以指定具体的类型,将这些占位符替换为实际的类型...
Java 1.5引入了泛型(Generics)的概念,这是一个重要的语言特性,它允许开发者在编译时期指定集合或其他数据结构中的元素类型,从而避免了运行时期的类型转换错误。通过使用泛型,开发者可以在编程阶段就确保类型的...
在Java编程语言中,泛型(Generics)和方法是两个重要的概念,它们极大地提高了代码的类型安全性和可重用性。这篇博文将探讨这两个主题,并结合源码和工具进行深入解析。 首先,泛型是Java 5引入的一项重要特性,它...
Java泛型(Generics)是一种在编译时确保类型安全的机制,它允许程序员编写类型安全的通用类或方法,而无需进行显式的类型转换。在Java 1.5引入泛型之前,集合类(如`ArrayList`)只能存储`Object`类型的元素。这...