zoukankan      html  css  js  c++  java
  • 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而且可序列化




  • 相关阅读:
    第四次作业:个人项目-小学四则运算 “软件”之初版
    随笔 | 阅读《构建之法》1-5章感想
    随笔 | 分布式版本控制系统Git的安装与使用
    随笔 | 对软件工程的一些感想
    为什么加载 JavaScript 使用 "src",CSS 使用 "href"?有其含义还是历史语法遗留?
    webstrom 添加一键open in browser
    sublime 代码段
    二.sublime配置 sublimecondeintel 分号后不要提示
    一.sublime配置 sublime 新建文档 默认html
    chrome使用
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5157020.html
Copyright © 2011-2022 走看看