黑马程序员_泛型总结(1)
来源:互联网 发布:vb 用代理ip打开网页 编辑:程序博客网 时间:2024/05/03 10:23
泛型(Generic)
泛型的初步认识:
泛型存在目的:提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入。
去类型化:编译器编译带类型说明的集合时会去除掉“类型”信息。
由于有去类型化,我们可以通过反射技术得到集合,再调用它的add方法,来向集合中添加其他类型的数据。
例:向ArrayList<Integer>中添加字符串
import java.lang.reflect.Method;import java.util.ArrayList;public class GenericTest{public static void main(String[] args) throws Exception{ArrayList<Integer> aList = new ArrayList<>();aList.add(1);aList.add(2);System.out.println(aList);Method addMethod = aList.getClass().getMethod("add", Object.class);addMethod.invoke(aList, "a");System.out.println(aList);}}//结果为://[1, 2]//[1, 2, a]
泛型的进阶:
泛型的一些专业术语:
1、整个称为ArrayList<E>泛型类型,其中的E称为类型变量或实际类型参数。
2、ArrayList<Integer>成为参数化的类型,其中Integer成为类型参数的实例或实际类型参数。
3、ArrayList<Integer>读作:ArrayList type type of Integer。
4、ArrayList是原始类型。
泛型的进阶理解:
1、参数化类型与原始类型的兼容性是:
参数化的类型可以引用一个原始类型的对象,编译报告警告;原始类型可以引用一个参数化的类型,编译报告警告。
2、参数化类型不考虑类型参数的继承关系:
ArrayList<Integer> list = new ArrayList<Object>();//错误!!!
ArrayList<Object> list = new ArrayList<Integer> ();//错误!!!
3、编译器不允许创建泛型变量的数组。
ArrayList<Object> list = new ArrayList<Integer> [];//错误!!!
泛型中的通配符 “?”:
1、使用“?”通配符可以引用其他各种参数化的类型,通配符定义的变量主要作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法,因为用“?”就是不确定的类型。
2、通配符扩展:
ArrayList<? extends Number> list = new ArrayList<Integer>();//<? extends Number>代表可以指向Number和他的子类;
ArrayList<? super Integer> list = new ArrayList<Number>();//<? super Integer>代表可以指向Integer和他的父类。
泛型简单应用:
import java.util.HashMap;import java.util.Map;import java.util.Set;public class GenericTest2{public static void main(String[] args){HashMap<String, Integer> hMap = new HashMap<String,Integer>();hMap.put("zhangsan", 23);hMap.put("lisi", 24);hMap.put("wangwu", 21);Set<Map.Entry<String, Integer>> entrySet = hMap.entrySet();for(Map.Entry<String, Integer> entry : entrySet){System.out.println(entry.getKey() + ":" + entry.getValue());}}}//结果为://wangwu:21//lisi:24//zhangsan:23
- 黑马程序员_泛型总结(1)
- 黑马程序员_泛型总结
- 黑马程序员_泛型总结
- 黑马程序员_泛型总结(2)
- 黑马程序员_泛型知识的总结
- 黑马程序员_枚举和泛型总结
- 黑马程序员_学习笔记1泛型及动态代理类的总结
- 黑马程序员_泛型总结(一个苹果是水果,一箱苹果不是水果)
- 黑马程序员_【总结】_多线程知识梳理1
- 黑马程序员_【总结】_集合框架知识梳理1
- 黑马程序员_反射总结
- 黑马程序员_线程总结
- 黑马程序员_集合总结
- 黑马程序员_异常总结
- 黑马程序员_多线程总结
- 黑马程序员_异常总结
- 黑马程序员_线程总结
- 黑马程序员_权限总结
- 开源日志系统 log4c 使用心得+总结
- ZOJ-2476
- 谈谈我对协议栈设计和架构的理解
- ruby中的打印接口
- AC自动机模板
- 黑马程序员_泛型总结(1)
- linux-0.11硬盘集成盘的制作方法--2
- 以下的静态方法实现了:把串s中第一个出现的数字的值返回。
- Delphi中基本控件之SaveDialog控件的使用总结
- 关于串口问题的一次出差经历
- UVa 706 Problem: LC-Display (PC 110104)
- 巧排扑克牌
- 直播系统使用说明
- VIM常用操作