黑马程序员——泛型学习

首先是泛型的使用,如下所示:

	public static void main(String[] args) {
		ArrayList<String> arr = new ArrayList<String>();
		arr.add("abc");
		//arr.add(1);
		//arr.add(new Date());

	}

在ArrayList集合后面加上<String>,这个集合的实例就只能装入String类型的对象了,所以加入int类型的和Date类型的对象都会报错。好处就是在使用集合中的元素时不用强制转换。

其实泛型的使用是针对编译器的,使用泛型只是告诉编译器要限定集合中的输入类型,挡住不允许的非法输入,但程序运行时就会把泛型的限定去掉,提高运行的效率,如:

	public static void main(String[] args) throws Exception{
		ArrayList<Integer> arr = new ArrayList<Integer>();
		arr.getClass().getMethod("add", Object.class).invoke(arr, "abc");
		System.out.println(arr.get(0));

	}

ArrayList中元素类型为Integer类型,但用反射的方法调用add方法,传入字符串"abc",没有报错,最后的运行结果为abc,证明程序在运行的时候是去掉了泛型信息的。

需要注意的是:参数话类型时不考虑参数的继承关系,如:

ArrayList<Object> arr = new ArrayList<String>;

因为不考虑继承关系,所以这句话会报错,就算String类型是Object的子类,也不能赋值给它。


然后是泛型中的通配符的使用:

1:通配符?可以引用其它参数的类型,如:

	public static void main(String[] args) throws Exception{
		ArrayList<Integer> arr = new ArrayList<Integer>();
		arr.add(1);
		arr.getClass().getMethod("add", Object.class).invoke(arr, "abc");
		test(arr);
		
	}
	
	public static void test(ArrayList<?> arr){
		//arr.add(2);//错误
		for(Object obj:arr){
			System.out.println(obj);
		}
	}

在test方法参数中有个ArrayList<?>类型的参数,通配符?在这里的作用是说明ArrayList里面的元素可以是任何类型,所以无论外部传入是的ArrayList<Integer>还是ArrayList<String>还是没有参数化的ArrayList,test方法都能接受且正确运行。这里需要注意:因为用了通配符?,所以在test方法中不确定传入的参数的类型,自然不能使用这些和具体类型有关的方法,如add()方法,但与类型无关的方法可以使用。


2:然后是通配符的扩展,如:

ArrayList<? extends Number> x;
ArrayList<? super Integer> y;

在通配符后面跟上了extends或super,分别指定通配符的上边界和下边界,即:指定上边界时,集合的元素只能是上边界的类或子类的实例,不能为其它类的实例,如x中元素可以为Integer类型,可以为Long类型,但不能为String;指定下边界时,集合的元素只能是下边界的类或下边界类的父类的实例,如y中的元素可以为Integer类型,也能为Number类型,但不能为Long类型或Byte类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值