泛型的用法
来源:互联网 发布:visio 网络拓扑图 注意 编辑:程序博客网 时间:2024/06/06 20:48
1. 泛型的作用
泛型,是在创建集合对象时就规定其允许保存的元素类型,然后由编译器负责检查所要添加元素的合法性,另外在取用元素时就不必再进行强制性的类型转换处理。即:将原本确定不变的类型参数化。JDK5.0提出了泛型的概念,通过使用泛型写出更为通用的程序代码。
2. 泛型的用法
泛型分为:泛型类、泛型方法、泛型接口。
泛型类:在类名的后面用尖括号括起一个(或多个)类型参数。(注:类型参数的作用域是定义这个类型参数的整个类,但不包括静态成员方法。因为其类型参数不定,无法直接分配储存空间)
泛型方法:在方法的返回类型前面加上一个类型参数T,并有<>括起来。
泛型接口:在借口名之后加上类型参数。
(下面用常用的泛型接口举例说明Comparablej接口和Comparator接口,通过实现借口中的方法来自定义Collections.sort()和Arrays.sort()的排序规则)
3. 泛型应用举例(Comparator和Comparable接口)
1、泛型类、泛型方法的应用实例
package xcu.hl.fanxing;import java.util.List;/** * 1、泛型类的使用 就是在类名后面加上<T> 多个类型参数时用 ,分隔 * 2、泛型方法的使用:只需要在返回值的前面加上一个类型参数<T> * 3、泛型接口:只需要在接口名字的最后加上一个类型参数< T > 就ok啦 * @author Administrator * @param <T> * @param <V> */public class Man<T , V> { //静态变量不能使用泛型// private static T leg; private T head; private T mouth; private V hand; public T getHead() { return head; } public void setHead(T head) { this.head = head; } public T getMouth() { return mouth; } public void setMouth(T mouth) { this.mouth = mouth; } public V getHand() { return hand; } public void setHand(V hand) { this.hand = hand; } //泛型方法 的使用 public T getS(List<T> list){ return list.get(0); } public static void main(String[] args) { Man<String ,Integer> m = new Man<String , Integer>(); m.setHand(5); m.setMouth("Mouth is used to eat !!!"); m.setHead("Head is used to think !!!"); System.out.println(m.getHead()+"\n"+m.getMouth()+"\n Man have five fingers\n"+m.getHand()); //如果在创建对象时没有定义(类型参数)的具体类型, //使用该类的一些属性是就需要进行强制类型转换了 Man m2 = new Man(); m2.setHand("two Hands"); String st = (String) m2.getHand(); System.out.println(st); }}
2、Comparator和Comparable接口的应用实例(利用Collections.sort() Arrays.sort()自动排序时使用)
package xcu.hl.fanxing;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;/** * 1、实现comparable接口,重写compareTo()方法来定义对象的比较规则。 * 2、实现Comparator接口,重写compare()方法来定义某个对象比较规则。 * 3、重写两个方法后就可以调用Collections.sort(List<Object>)对相应对象的集合进行排序。 * 4、Arrays.sort(<T extends Number> T []) 就是只能对数组类型的对象进行排序。 * @author java_韩磊 */public class Woman implements Comparable<Woman> { private int age; private String name; public Woman(int age, String name) { this.name = name; this.age = age; } private String getName() { return name; } private void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //定义Woman对象的排序规则 //先按照name排序,如果姓名一样的话就用年龄排序。 @Override public int compareTo(Woman o) { if(this.getName().compareTo(o.getName())!=0){ return this.getName().compareTo(o.getName()); }else{ return this.getAge()-o.getAge(); } } public static void main(String[] args) { List<Woman> list= new ArrayList<Woman>(); Woman w = new Woman(12,"abc"); Woman w2 = new Woman(31,"bca"); Woman w3 = new Woman(21,"acb"); Woman w4 = new Woman(51,"bac"); Woman w5 = new Woman(21,"bac"); list.add(w); list.add(w2); list.add(w3); list.add(w4); list.add(w5); Double [] d = {1.1,0.2,5.5,3.2,1.0}; //自动调用new WomanComparator()的compare()方法进行排序 //只能对数组对象进行排序,不能对集合对象排序(具体的使用方法看API文档) Arrays.sort(d,new WomanComparator()); System.out.println("Double类型数据从大到小配需后为:"); for(int i=0;i<d.length; i++){ System.out.print(d[i] +" \t"); } //自动调用重写的compareTo()方法进行排序,针对集合对象进行排序 Collections.sort(list); System.out.println(); System.out.println("Woman对象数据按照指定规则为woman排序后为:"); for(Woman woman: list){ System.out.print(woman.getAge()+" " +woman.getName()+" \t"); } }}//继承Comparator接口,重新定义Double类型数据的比较规则。package xcu.hl.fanxing;import java.util.Comparator;public class WomanComparator implements Comparator<Double> { //重新定义Double类型的排序规则,按照从大到小的规则排序 @Override public int compare(Double o1, Double o2) { // TODO Auto-generated method stub return (int) (o2-o1); }}
4. 受限的类型参数和类型通配符“ ? ”
- 将类型参数限制为Number类子类< T extends Number>
- 类型参数 ? , 表示该类型参数可以匹配任何类型。
- ? extends Number 上限通配符
- ? super Number 下限通配符
泛型的难点就是通配符的应用,有兴趣者可以深入研究,这里只是简单介绍泛型的基本用法。
0 0
- 泛型的用法
- 泛型的用法
- 泛型的用法
- 泛型的用法
- 泛型通配符?的用法
- 泛型通配符 ?的用法
- 泛型的高级用法
- 泛型的Distinct(IEqualityComparer)的用法
- 泛型的几种用法
- 泛型的定义及用法
- Java泛型的理解和用法
- java中的泛型的用法
- java泛型的一些常见用法
- java泛型的用法和方法
- android泛型的简单用法
- C# KeyValuePair 的基本用法及结合泛型的用法
- C# KeyValuePair 的基本用法及结合泛型的用法
- Java5泛型的用法,T.class的获取
- 程序员必须知道的10大基础实用算法及其讲解
- Linux系统文件同步rsync+ssh+inotify+unison实现
- 字符串和基本数据包装类
- LabelAtlas quick-cocos2dx中的艺术字的使用
- 查看并杀掉tomcat进程
- 泛型的用法
- String类常见的方法
- Quartz插件的使用
- 发送邮件
- (javaweb读书笔记系列之二)servletconfig和servletcontext
- 判断文件的编码方式
- iOS 客户端学习-UITextView
- js 字符串转化成数字
- 水波效果