1.介绍
所谓的泛型就是将类型作为一种參数来传递。有了泛型后类型不再是一成不变的。能够通过泛型參数来指定。
能够提供程序开发的灵活性。
2.泛型类或接口的使用
泛型类声明时。与普通类没有太大的差别,仅仅是在类中增加了类型变量的声明
public class 类名<类型变量>{..........................................................................}
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; //自己定义的泛型类 class MyValue<T,U> { //定义两个由类型变量指定类型的成员变量 private T value1; private U value2; //定义两个成员变量的set方法,其參数类型由类型变量确定 public void setValue(T newValue1,U newValue2) { this.value1=newValue1; this.value2=newValue2; } //value1成员变量的get方法 public T getValue1() { return this.value1; } //value2成员变量的get方法 public U getValue2() { return this.value2; } } //主类 public class Sample35_1 { public static void main(String args[]) { //创建自己定义泛型类的对象。并指定两个类型变量 MyValue<String,Integer> mv1=new MyValue<String,Integer>(); //调用set方法对成员变量进行设置 mv1.setValue("你好该參数为字符串类型",new Integer(100)); //返回第一个成员变量的值 String str=mv1.getValue1(); //返回第二个成员变量的值 Integer num=mv1.getValue2(); //将两个值进行打印 System.out.println("mv1对象的第一个參数值为:"+str+" 第二个參数值为:"+num+"。"); //创建还有一个自己定义泛型类的对象。并另外指定两个类型变量 MyValue<Integer,String> mv2=new MyValue<Integer,String>(); //调用set方法对成员变量进行设置 mv2.setValue(new Integer(100),"你好该參数为字符串类型"); //返回第一个成员变量的值 num=mv2.getValue1(); //返回第二个成员变量的值 str=mv2.getValue2(); //将两个值进行打印 System.out.println("mv2对象的第一个參数值为:"+num+" 第二个參数值为:"+str+"。"); } } </span>
上述实例中自己定义了一个泛型类MyValue,有两个类型參数T与U,而且成员变量也都是由类型參数在指定。接下来在创建泛型类MyValue的对象时。为类型变量指定了明白的类型值。
3.泛型方法
在Java中也支持泛型方法,而且比泛型类更加的灵活。
public static <类型变量> 返回类型 方法名(參数列表){}
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; public class Sample35_2 { public <T> void PrintTest(T t1){ System.out.println(t1); } //自己定义的泛型方法 public static <T> T getLast(T[] a) { //返回指定类型数组的最后一个元素 return a[a.length-1]; } public static void main(String args[]) { //创建字符串类型的数组 String[] str={"这里是第一个元素","这里是第二个元素","这里是第三个元素"}; //使用泛型方法。并为其指定类型參数 String laststr=Sample35_2.<String>getLast(str); //打印结果 System.out.println("String数组str的最后一个元素为:“"+laststr+"”。"); //创建Integer类型数组 Integer[] num={new Integer(100),new Integer(200),new Integer(300)}; //使用泛型方法,但并没有显式指定类型參数 Integer lastnum=Sample35_2.getLast(num); Sample35_2 a=new Sample35_2(); a.PrintTest("你好吗"); //打印结果 System.out.println("Integer数组num的最后一个元素为:“"+lastnum+"”。
"); } } </span>
上述就是泛型方法的使用。一般泛型方法以静态方法居多。
4.类型变量的限制
假设想对类型变量进行限制的话。这时就须要使用类型变量的限制。详细语法例如以下
类型变量 extends 限定类型序列
限定类型序列,能够是类、接口等,多个限制之间通过&隔开
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; import java.io.*; //定义泛型类,并对类型參数进行限定 class MyValue1<T extends Number&Comparable&Serializable> { //定义由类型參数指定类型的成员变量 private T value; //成员变量的set方法 public void setValue(T newValue) { this.value=newValue; } //成员变量的get方法 public T getValue() { return this.value; } } //主类 public class Sample35_3 { public static void main(String args[]) { //创建类型參数指定为Integer的MyValue对象 MyValue1<Integer> mv=new MyValue1<Integer>(); //设置mv中的值 mv.setValue(new Integer(200)); //获取mv中的值 Integer num=mv.getValue(); //打印该值 System.out.println("mv对象中的值为:"+num +"该值既属于Number类又实现了Comparable与Serializable。"); } } </span>
上述实例就是对类型变量进行了限定。限定为Number而且可序列化
本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5157020.html,如需转载请自行联系原作者