泛型



package hanshi.net;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.util.*;

public class annotation {
	public static void main (String[] args)throws Exception{
		ArrayList<String> al = new ArrayList<String>();
		al.add("add");
		al.add("dfa");
		print(al.get(1));
		//Constructor cs = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
				//第一种不能泛型               第二种可以泛型
		//Constructor<String> cs = String.class.getConstructor(StringBuffer.class);
		//String str = cs.newInstance(new StringBuffer("abc"));
		       //第一种和第二种前后是一样的,只不过是参数问题不同而已
		Constructor<String> cs = String.class.getConstructor(String.class);
		String str = cs.newInstance("abc");
		print(str);
		print(str.charAt(1));
		ArrayList<Integer> ai = new ArrayList<Integer>();
		ai.add(1);
		ai.add(2);
		print(ai.get(1));
		print(al.getClass() == ai.getClass());   //true   所以javac之后就脱去泛型
		ai.getClass().getMethod("add", Object.class).invoke(ai, "asd"); //反射   后去方法进行实例化
		print(ai);    //[1, 2, asd]    没有泛型限制了   在整形后面可以添加字符串类型的数据
		
		
		//ArrayList<Integer> arr[] = new ArrayList<Integet>[10];
		//这种定义方法是绝对错误的,不允许对泛型的集合类型进行数据操作
		
		/*int i1 = add(3,5);
		Number i2 = add(3,3.5);
		 Object i3 = add(3,"abc");*/
		 //如果两个参数的数据定义模板是一样的,而实际上传递进来的参数类型又是不一样的
		 //那么在使用的过程中就是对两个参数取交集
		 
		 
		 //泛型不能用于基本数据类型,第二个的操作是错误的
		 swap(new String[]{"sfa","fdg","geg"},1,2);
		// swap(new int[]{1,2,3,4,5},1,2);
		 //像add的3,5两个参数就不一样,因为没有歧义性,所以就会自动直接进行拆箱和装箱。。。
		 
		 
		 
		 //定义一个自动强制类型转化的方法。。。    注意它的强制类型转换的过程,很奇妙
		 Object obj = "adg";
		 String strr = change(obj);
		 print(strr);
	}
	public static <T> T change(Object obj){
		return (T)obj;  //返回值的泛型类型是由接受的类型所决定的。。。
	}
	public static <T> void  swap(T[] a,int i,int j){
		T t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	public static <T> T add(T a,T b){
		return null;
	}
	public static void print(Object obj){
		System.out.println(obj);
	}

}




转载于:https://my.oschina.net/u/2356176/blog/423979

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值