现在的位置: 首页 > 综合 > 正文

Java 泛型 理论与实践

2013年02月15日 ⁄ 综合 ⁄ 共 1481字 ⁄ 字号 评论关闭

       泛型简介: JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进。泛型是 Java 语言走向类型安全的一大步。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 

 

普通泛型

class Point<T>{       // 此处可以随便写标识符号  
	    private T var ; // var的类型由T指定,即:由外部指定  
	    public T getVar(){  // 返回值的类型由外部决定  
	        return var ;  
	    }  
	    public void setVar(T var){  // 设置的类型也由外部决定  
	        this.var = var ;  
	    }  
	};  
	public class Demo{  
	    public static void main(String args[]){  
	        Point<String> p = new Point<String>() ; // 里面的var类型为String类型  
	        p.setVar("it") ;        // 设置字符串  
	        System.out.println(getVar()) ;   // 打印字符串
	    }  
	};  

如果没有泛型, 程序员必须记住对象类型、执行类型转换。这中情况下,很容易导致类型转换的失败

class Point{       
    private String var ; 
	    public String getVar(){  
	        return var ;  
	    }  
	    public void setVar(String var){  
        this.var = var ;  
    }  
	};  
	public class Demo{  
	    public static void main(String args[]){  
	        Point p = new Point() ; 
	        p.setVar("it") ;        
	        System.out.println((int)getVar()) ;   // 类型转换出现错误
	    }  
	};  

泛型的使用,节省了某些Java中类型之间转换。很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。

泛型数组

public class GenericsDemo30{
	public static void main(String args[]){
		Integer i[] = fun1(1,2,3,4,5,6) ;	// 返回泛型数组
		fun2(i) ;
	}
	public static <T> T[] fun1(T...arg){	// 接收可变参数
		return arg ;			// 返回泛型数组
	}
	public static <T> void fun2(T param[]){	// 输出
		System.out.print("接收泛型数组:") ;
		for(T t:param){
			System.out.print(t + "、") ;
		}
	}
};

通配符

class Info<T>{
	private T var ;		// 定义泛型变量
	public void setVar(T var){
		this.var = var ;
	}	
	public T getVar(){
		return this.var ;
	}
	public String toString(){	// 直接打印
		return this.var.toString() ;
	}
};
public class GenericsDemo14{
	public static void main(String args[]){
		Info<String> i = new Info<String>() ;		// 使用String为泛型类型
		i.setVar("it") ;							// 设置内容
		fun(i) ;
	}
	public static void fun(Info<?> temp){		// 可以接收任意的泛型对象
		System.out.println("内容:" + temp) ;
	}
};

抱歉!评论已关闭.