12 泛型程序设计

为什么要使用泛型程序


泛型程序设计, 意味着编写的代码可以被很多不同类型的对象所重用. 例如, 我们并不希望为聚集String和File对象分别设计不同的类,
实际上,也不需要这样做, 因为一个ArrayList类可以聚集任何类型的对象, 这是一个泛型程序设计的实例. 没有泛型以前,
ArrayList维护的时一个object类型的数组, 这样当获取一个值时, 必须使用强制类型转换. (并非类型判断, 而是强制的类型转换)

简单的泛型类定义


public class Pair<T> {
public Pair() { first = null, second = null; }
public Pair(T first, Tsecond) {this.first = first; this.second = second;}
public T getFirst() { return first;}
public T getSecond() { return second;}
public void setFirst( T newvalue) {fisrt = newvalue;};
public void setSecond(T newvalue) {second = newvalue};

private T first;
private T second;
}

注意, 这种泛型类, 泛型与类是一体的, 例如在函数中, 返回一个这样的实例变量的话, 就要使用 Pair<T> 作为类型, 例如:
public static Pair<String> minmax(String[] args), 这种方法叫做泛型方法. <>
内放入具体的类型

泛型方法可以定义在普通类和泛型类中.

对泛型类型的限制, <T extends Comparable>, 这里的extends并不是继承的意思, Comparable本身是个接口,
这里的含义是, 抽象出来是 <T extends Bounding Type>, Bounding Type 表示绑定类型, 而 T
应该是绑定类型的子类型, T 和 绑定类型可以是类也可以是接口. 选择关键字 extends 更接近子类的概念, 并不是传统意义的继承. 并且可以有多个限制,
比如 <T extends Comparable & Serializable>, 例如:

public static <T extends Comparable> Pair<T> minmax(T[] a)  //
这里的返回类型就是 受到限制的子类型, Pair<T>还是那句话, 是一个整体, 就当做是一个名称就可以了.

约束和局限性

1) 不能用基本类型实例化类型参数, 例如 Pair<double>不行, 但是可以有 Pair<Double>

2) 运行时类型检查时, 只能使用基本类型, 例如, if (a instanceof Pair<String>) // ok的, if (a
instanceof Pair<T>) // NG

3) 不能抛出也不能捕获泛型实例, 例如: try {} catch (T e) {};  // 这里的 T e 无法捕获

4) 参数化数组类型不合法, 例如: Pair<String>[] table = new
Pair<String>[0];  即泛型类不能被用作定义数组变量

5) 不能实例化类型变量, 例如 new T()

泛型这个东西, 看来使用系统的泛型应该就够了对于 web 开发.

12 泛型程序设计,布布扣,bubuko.com

时间: 2024-08-01 22:47:32

12 泛型程序设计的相关文章

基础知识(12)- 泛型程序设计

12.1 为什么要使用泛型程序设计 12.2 定义简单泛型类 12.3 泛型方法 12.4 类型变量的限定 12.5 泛型代码和虚拟机  12.5.1 翻译泛型表达式  12.5.2 翻译泛型方法  12.5.3 调用遗留代码 12.6 约束与局限性  12.6.1 不能用基本类型实例化类型参数  12.6.2 运行时类型查询只适用于原始类型  12.6.3 不能创建参数化类型的数组  12.6.4 Varargs警告  12.6.5 不能实例化类型变量  12.6.6 泛型类的静态上下文中类型

Java核心技术(五) —— 泛型程序设计(2)

本文延续上文,针对泛型程序设计,从以下方面进行讲解: 为何使用泛型程序设计 定义简单的泛型类 泛型方法 类型变量的限定 泛型代码和虚拟机 约束与局限性 泛型类型的继承规则 通配符类型 反射和泛型 4.泛型代码和虚拟机 这里内容比较多且杂,我们先概括几个主要思想: 虚拟机中没有泛型,只有普通的类和方法 所有的类型参数都用他们的限定类型转换 桥方法被合成来保持多态 为保持类型安全性,必要时插入强制类型转换 (1)当定义一个泛型类型时,系统会自动提供一个相应的原始类型.原始类型的名字就是删去类型参数后

实验十 泛型程序设计技术

实验十  泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1) 理解泛型概念: (2) 掌握泛型类的定义与使用: (3) 掌握泛型方法的声明与使用: (4) 掌握泛型接口的定义与实现: (5)了解泛型程序设计,理解其用途. 2.实验内容和步骤 实验1: 导入第8章示例程序,测试程序并进行代码注释. 测试程序1: 编辑.调试.运行教材311.312页 代码,结合程序运行结果理解程序: 在泛型类定义及使用代码处添加注释: 掌握泛型类的定义及使用. 程序源代码及其注释: Pair

泛型程序设计

在JDK5.0之前: public class ArrayList{ public Object get(int i){...} public void add(Object o){...} ... private Object[] elementData; } 这样实现有两问题.首先,当取得一个值的时候必须进行强制类型转换. ArrayList files = new ArrayList(); ... String filename = (String)names.get(0); 此外,这里没

泛型程序设计---泛型类的定义

泛型程序设计,程序设计都明白什么意思,那泛型呢?什么是泛型? 所谓泛型是指:额...好吧,说不清...举个例子吧:古代的宗教道教中有一句话,道生一,一生二,二生三,三生万物.这里的道即对应程序设计中的泛型,泛型很抽象,我也说不出所以然...(大家可以在文章下方留言讨论) 那么怎么定义泛型类呢? 语法如下: 在看语法之前,需要先了解 类型变量的概念.所谓类型变量是指:可以代替任何类型的一个变量,在定义时,可以使用字符(一般大写,且一般用T及其附近的字符):实际,声明泛型类的变量时,需要使用具体的类

(十七)泛型程序设计

为什么使用泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 定义简单的泛型类 一个泛型类就是具有 “一个或多个类型变量” 的类. 以下定义一个泛型类: public class Pair<T> { private T first; private T second; public Pair(){ first=null; second=null; } public Pair(T first,T second){ this.first = first; this.seco

Java基础语法&lt;十二&gt; 泛型程序设计

1 意义 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 常见应用 : ArrayList 2 K T V E ? object等的含义 类型变量使用大写形式 E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类)(需要时还可以用临近的字母U和S)表示任意类型  S.U.V – 2nd.3rd.4th types K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定的java类型(无限制通配

C++ Primer 学习笔记_46_STL剖析(一):泛型程序设计、什么是STL、STL六大组件及其关系

一.泛型程序设计 1.泛型编程(generic programming):相同的逻辑和算法,对不同类型的数据进行处理 2.将程序写得尽可能通用 3.将算法从数据结构中抽象出来,成为通用的 4.C++的模板为泛型程序设计奠定了关键的基础 二.什么是STL 1.STL(Standard Template Library),即标准模板库,是一个高效的C++程序库. 2.包含了诸多在计算机科学领域里常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性 3

浅谈泛型程序设计

一.为什么要使用泛型程序设计 1.泛型程序设计:以为这编写代码可以被很多不同类型的对象所重用.例如:我们不必为了聚集String和File而别设计不同的类: 2.使代码具有更好的可读性:ArrayList<String> str = new ArrayList<>(); 人们一看就知道是包含了String对象的数组列表: 二.定义简单的泛型类 泛型类:就是具有一个或多个类型变量的类. 声明语法:public class  ClassName<T> {...} 例: pu