Java学习笔记九(泛型)

 

 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而且可序列化




原文地址:https://www.cnblogs.com/mfrbuaa/p/5157020.html