泛型的用法
来源:互联网 发布:摄影网络销售 编辑:程序博客网 时间:2024/06/04 20:03
泛型的用法
泛型是JDK1.5以后出现的新特新,主要是用于解决安全问题,它是一个安全机制。
将运行时期出现的安全问题转移到了编译时期,方便了程序员解决问题,让运行时问题减少。
还有就是避免了强制转换的麻烦
//用一段代码来演示一下泛型用在集合上import java.util.*;class demo01 { public static void main(String[] args) {//泛型写在尖括号中,这里的泛型是Stirng,意思就是只能往arr中传String类型的对象 ArrayList <String>arr = new ArrayList<String>(); arr.add("java1");//添加元素 arr.add("java2"); arr.add("java3"); arr.add("java4");//获取一个迭代器,也加了泛型,迭代器迭代就可以直接获得String类型的对象 Iterator <String> it = arr.iterator(); while(it.hasNext()) //判断容器是否为空 返回boolean { sop(it.next());//打印元素 } } //一个打印的小方法 public static void sop(Object obj) { System.out.println(obj); }}
在没有泛型之前,往集合中添加元素都是靠程序员的主观判断去添加,很容易引发安全问题,引进泛型之后,通过泛型判断添加元素的类型,减少了程序员的主观判断,也大大增加了程序的安全性。
泛型不仅可以定义在集合上,还可以定义在类,函数和接口上!
那什么时候定义泛型类呢?
当类中要操作的引用数据类型不确定的时候,就可以定义泛型类;早期没有泛型的时候,都是通过Object来完成拓展,现在可以用泛型。
//用一段代码演示泛型定义在类上,接口上和函数上class demo02 { public static void main(String[] args) { demo<String> t1 = New demo<String>(); t1.noe(“abc”);//泛型在类上 t1.show(123);//把泛型定义在方法上 }}interface Inter<T>//定义在接口上{ void show(T t);}class Interg<T> implements Inter<T> //类实现接口{ public void show(T t) { System.out.println("show"+t); }}class demo<Q>//泛型定义在类上{ public <B> void one(B b)//方法上定义自己的泛型 { System.out.println("one:"+b); } public void show(Q q)//直接用类上的泛型 { System.out.println("method:"+q); }//**静态只能用定义在自己方法上的泛型,不能用定义在类上的泛型 public static <Z> void method(Z z)// 定义在静态方法上的泛型 { System.out.println("method:"+z); }}
注意:静态方法不能引用类上定义的泛型,但是可以定义在自己的方法上。
泛型限定
什么是泛型限定呢,就是把泛型限定在一个范围之类,比起单个的泛型,其拓展性又大大增强。这里我们会用到一个特殊字符:? 就是这个问号,叫做通配符,也叫做占位符,就是不知道泛型的具体类型时可以用这个通配符去表示。
在泛型限定有两种限定一种上限,一种下限。
这是限定上限
//用一个例子来说一下/*定义一个person类定义一个学生类继承person定义一个工人类继承person写一个排序方法接收Person可以同时给学生对象和工人对象进行排序使用*/class demo04 { public static void main(String[] args) { //创建一个存储学生类型的集合,加载一个父类的比较器 去比较 TreeSet<students> st = new TreeSet<students>(new sortList()); st.add(new students("marry",12)); st.add(new students("narry",18)); st.add(new students("karry",16)); st.add(new students("zarry",15)); st.add(new students("barry",13)); st.add(new students("garry",16)); st.add(new students("yarry",15)); st.add(new students("rarry",13)); Iterator<students> it = st.iterator(); while(it.hasNext()) { students s = it.next(); sop(s.getName()+"---"+s.getAge()); } } //打印方法 public static void sop(Object obj) { System.out.println(obj); }}//定义一个人的类class Person{ private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; }}class students extends Person{//学生类继承了人的类 students(String name,int age) { super(name,age); }}class worker extends Person{//工人类继承了人的类 worker(String name,int age) { super(name,age); }}//这是一个比较器,可以接收Person类的和他的子类class sortList implements Comparator<Person>{ public int compare(Person p1,Person p2) { int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())); if(num == 0) { return p1.getName().compareTo(p2.getName()); } return num; }}
0 0
- 泛型的用法
- 泛型的用法
- 泛型的用法
- 泛型的用法
- 泛型通配符?的用法
- 泛型通配符 ?的用法
- 泛型的高级用法
- 泛型的Distinct(IEqualityComparer)的用法
- 泛型的几种用法
- 泛型的定义及用法
- Java泛型的理解和用法
- java中的泛型的用法
- java泛型的一些常见用法
- java泛型的用法和方法
- android泛型的简单用法
- C# KeyValuePair 的基本用法及结合泛型的用法
- C# KeyValuePair 的基本用法及结合泛型的用法
- Java5泛型的用法,T.class的获取
- Linux 修改系统时间
- zookeeper原理及应用
- easyui-tree-url-param
- stack、queue、deque的区别
- Oracle SQL Developer远程连接服务器端oracle数据库配置。
- 泛型的用法
- 234Palindrome Linked List
- 求解立方根
- 解决Win UAC问题的编程
- ijkplayer阅读笔记06-音频流程
- Linux移植相关链接
- Java中线程总结
- snapper命令技巧
- jquery中获取动态checkbox是否被选中