Java基础:泛型

2014-11-23 22:22:00 · 作者: · 浏览: 0

Java的泛型是什么呢, 就是类型的参数化,这得类型包括方法参数和返回值,也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了。

在之前,学过“重载”的概念,重载是什么呢,举例来说

public class Test{
	// 处理整型数据
	void receive(int i) {
		System.out.println("Received one int data");
		System.out.println("i="+i);
	}
	// 处理浮点型数据
	void receive(float f) {
		System.out.println("Received one float data");
		System.out.println("f="+f);
	}
	// 处理字符串数据
	void receive(String s) {
		System.out.println("Received a String");
		System.out.println("s="+s);
	}

}

在上面的这个类里的三个方法中有相同的处理逻辑,只有参数类型不同。方法调用时程序会根据参数的类型调用相应参数的方法,这就是参数重载,让类以统一的方式处理不同数据类型的手段。


那泛型和重载有什么联系呢?

泛型和重载从不同的角度处理了多种数据类型的问题。泛型可以应用的更广泛,可以用于方法、接口、类。那么让我们看看如何用泛型实现上面的Test类呢?

public class Test
  
    {
	void receive(T t) {
		System.out.println("Received one "+t.getClass().getName()+" data");
		System.out.println("t="+t);
	}
	
	public static void main(String[] args){
		Test
   
     test=new Test
    
     (); test.receive("abc"); Test
     
       test1=new Test
      
       (); test1.receive(1); } }
      
     
    
   
  
我们发现在泛型的应用中,我们用变量T代替了具体的类型参数,可以等到实际调用的时候在确定参数的类型,这样大大减少了代码的量,并且T可以是java中的任何类型(包括基本类型和对象类型)。其实这里并没有什么新知识,只是在函数的基础上,把传入数据和输出数据(返回值)的类型也参数化了。下面是一个方法的返回值也是用泛型的例子:

public class TestGenetic
  
    {
	public Hashtable
   
     table=new Hashtable
    
     (); public void put(K k,V v){ table.put(k, v); } public V get(K k){ return table.get(k); } public static void main(String[] arg){ TestGenetic
     
       test=new TestGenetic
      
       (); test.put("001", "abc"); test.put("002", "def"); String str=test.get("001"); System.out.print(str); } }
      
     
    
   
  

其中get方法的返回值也使用了泛型,因此应用就更加的灵活了。当然,以上代码中用到的T,K,V都只相当于变量名,用什么字母代替都可以。