在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>
分享到:
相关推荐
泛型(Generics)是JDK5引入的一种参数化类型特性。它提供了编译时类型安全检测机制。其本质是参数类型,所操控的数据类型被指定为一个参数。泛型不存在于JVM虚拟机。泛型学习、泛型限定类型、泛型通配符、泛型继承。...
泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值...
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值...
泛型格式化参数化数据类型,以便我们可以将类,接口或方法用于许多不同的数据类型。 集合只是具有相同数据类型的对象的集合,具体取决于结构,存储和安排这些对象的方式,我们将它们分为以下几类: 大批 收藏 ...
泛型(Generics)其实就是把类型参数化,真正的名字叫做 类型参数,它给强类型编程语言加入了更强的灵活性。在 Java 中,只要是有类型的 API 元素,都可以泛型化,也就是泛型类、泛型接口、泛型方法和泛型属性,泛型...
前言 泛型允许你在编译时实现类型安全。它们允许你创建一个数据结构而不限于一特定的数据类型。...为使用它们,只需简单地指定参数化的类型即可。 代码如下:ArrayList array = new ArrayList(); arra
2.6 通配符与类型参数 2.7 通配符捕获 2.8 对通配符的限制 第三章(集合类) 3.1 可比较的 3.2 集合的最大值 3.3 水果相关示例 3.4 比较 3.5 枚举类型 3.6 多重界限 3.7 桥接器 3.8 协变覆盖 第四章(声明) 4.1 构造...
新增讨论了委托和接口泛型类型参数的不同。 Chapter 13-Interfaces 无新话题。 Part III – Essential Types Chapter 14-Chars, Strings, and Working with Text 无新话题。 Chapter 15-Enums 新增了枚举和...
泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略...
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 ...
)下面是一个清单: 关键字 用途 deprecation 使用了不赞成使用的类或方法时的警告 unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 fallthrough 当 Switch ...
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 ...