Java泛型的使用

泛型  Generic
Jdk5之前,对象保存到集合中就会失去其特性,取出来的通常需要手工进行类型转换,这样就可能引起
一些安全性的问题。泛型是只给编译器用的。编译完后字节码中没有字节码。

注:如果等号两边都用了泛型,必须类型一致,否则就错误。或者一边使用泛型,另一边不适用泛型是可以的。


Java中普通方法、构造方法、静态方法都可以用泛型,但是使用前一定要对泛型进行声明,语法:<T>,可以是任意字母,但通常必须大写。<T>通常放在方法的返回值声明前。如:public static<T>void do(T t);
也可以在class类上声明,如:public class A<T>{}然后直接用泛型T,但是针对静态方法没用(静态方法需要使用前一种方式,在返回之前声明)。


泛型的使用例子:


package com.dp.javaWeb.Generic;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

public class generic {
	/**
	 * 泛型的应用
	 */
	@Test
	public void test1() {
		// TODO Auto-generated method stub
		List li=new ArrayList();
		li.add("fuck");
//		System.out.println(li.get(0));
		
//		int i=(Integer) li.get(0);
//		System.out.println(i);//像这样得到集合的值就不对,类型不匹配
		
		//s三种访问集合的方式
		for(Object obj:li){
			System.out.println(obj);
		}
		
		for(int j=0;j<li.hashCode();j++){
			System.out.println(li.get(j));
		}
		
		Iterator d=li.iterator();
		while(d.hasNext()){
			Object obj=d.next();
			System.out.println(obj);
		}
	}
	
	//泛型便利list集合
	@Test
	public void test2() {
		// TODO Auto-generated method stub
		List<String> li=new ArrayList<String>();
		li.add("fuck");
		li.add("ssssss");
		li.add("Mr_Li13");
		
		for(String s:li){
			System.out.print(s+"   ");
		}
		
		/**
		 * 结果为:fuck   ssssss   Mr_Li13   
		 */
	}
	
	//泛型便利Map方式一
	@Test
	public void test3() {
		// TODO Auto-generated method stub
		Map<Integer, String> li=new LinkedHashMap<Integer, String>();
		li.put(1, "fuck");
		li.put(2, "ssssss");
		li.put(3, "Mr_Li13");
		Set<Integer> keys=li.keySet();
		for(Integer s:keys){
			String value=li.get(s);
			System.out.println("key:"+s+"   value:"+value);
		}
		
		/**
		 * 结果为:
		 *  key:1   value:fuck
		 *	key:2   value:ssssss
		 *	key:3   value:Mr_Li13   
		 */
	}
	
	//泛型便利Map方式二
		@Test
		public void test4() {
			// TODO Auto-generated method stub
			Map<String, String> li=new LinkedHashMap<String, String>();
			li.put("1", "fuck");
			li.put("2", "ssssss");
			li.put("3", "Mr_Li13");
			Set<Map.Entry<String, String>> keys=li.entrySet();
			for(Map.Entry<String, String> s:keys){
				String key=s.getKey();
				String value=s.getValue();
				System.out.println("key:"+key+"   value:"+value);
			}
			
			/**
			 * 结果为:
			 *  key:1   value:fuck
			 *	key:2   value:ssssss
			 *	key:3   value:Mr_Li13   
			 */
		}
		
		
}


类方法的泛型使用:

package com.dp.javaWeb.Generic;

import org.junit.Test;

public class generic1<T> {//在类上直接声明泛型,下面直接用
	/**
	 * 对方法使用泛型
	 */
	@SuppressWarnings("unused")
	public void test1(T t) {
		// TODO Auto-generated method stub

	}
	public T test2(T t) {
		return t;
		// TODO Auto-generated method stub

	}
	public static<T> T test3(T t) {//静态方法就需要在返回值前声明泛型
		return t;
		// TODO Auto-generated method stub

	}
	@Test
	public void test4() {
		// TODO Auto-generated method stub
		System.out.println(test3("Mr_li13"));//这种可以直接进行调用
		
		
		generic1<String> gr=new generic1<String>();
		System.out.println(gr.test2("333"));//这种需要类实例对象才能调用
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值