泛型1:

来源:互联网 发布:淘宝进销存管理软件 编辑:程序博客网 时间:2024/06/07 14:59
import java.util.*;/*泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。好处1.将运行时期出现问题ClassCastException,转移到了编译时期。,方便于程序员解决问题。让运行时问题减少,安全。,2,避免了强制转换麻烦。泛型格式:通过<>来定义要操作的引用数据类型。在使用java提供的对象时,什么时候写泛型呢?通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。*/class GenericDemo {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("abc01");al.add("abc0991");al.add("abc014");//al.add(4);//al.add(new Integer(4));Iterator<String> it = al.iterator();while(it.hasNext()){String s = it.next();System.out.println(s+":"+s.length());}}}
import java.util.*;class GenericDemo2 {public static void main(String[] args) {TreeSet<String> ts = new TreeSet<String>(new LenComparator());//将集合中要存储的数据类型作为参数传递到<>中即可。ts.add("abcd");ts.add("cc");ts.add("cba");ts.add("aaa");ts.add("z");ts.add("hahaha");Iterator<String> it = ts.iterator();while(it.hasNext()){String s = it.next();System.out.println(s);}}}class LenComparator implements Comparator<String>  //将比较器中的元素也限定为String{public int compare(String o1,String o2){int num = new Integer(o2.length()).compareTo(new Integer(o1.length()));if(num==0)return o2.compareTo(o1);return num;}}


class Worker{}class Student{}//泛型前做法。class Tool{private Object obj;public void setObject(Object obj){this.obj = obj;}public Object getObject(){return obj;}}//泛型类。/*什么时候定义泛型类?当类中要操作的引用数据类型不确定的时候, 有时候需要操作worker ,有时候需要操作Student早期定义Object来完成扩展。现在定义泛型来完成扩展。*/class Utils<QQ>{private QQ q;public void setObject(QQ q){this.q = q;}public QQ getObject(){return q;}}class  GenericDemo3{public static void main(String[] args) {Utils<Worker> u = new Utils<Worker>();  //传入Worker类u.setObject(new Student());
/*
GenericDemo3.java:65: 错误: 无法将类 Utils<QQ>中的方法 setObject应用到给定类型;                u.setObject(new Student());                 ^  需要: Worker  找到: Student  原因: 无法通过方法调用转换将实际参数Student转换为Worker  其中, QQ是类型变量:    QQ扩展已在类 Utils中声明的Object1 个错误
*/Worker w = u.getObject();;/*Tool t = new Tool();t.setObject(new Student());Worker w = (Worker)t.getObject();*/}}
//泛型定义在接口上。interface Inter<Q>{ <Q>void show(Q t); void show2(Q t);}/*class InterImpl implements Inter<String>{public void show(String t){System.out.println("show :"+t);}}*/class InterImpl<T> implements Inter<T>//若为class InterImpl implements Inter<T> //编译失败 需要传入泛型参数 此处接口泛型 和类泛型是一样的 若不一样 报错{public void print(T a)  // 当函数没有自定义泛型时,只能传入与类泛型一致的泛型{System.out.println("print"+a);}public <k>void  show(k t)  //复写接口中的 泛型函数//当函数有自定义泛型k(也可以写成T 只是一个符号恶意)时 //可以传入  与类泛型不相同的 泛型//  简单一句话 如果函数需要传入 泛型 可以传入  任意泛型{System.out.println("show :"+t);}public void show2(T t)  // 复写接口中的函数 要求传入的 参数 是属于类泛型(接口泛型){System.out.println("show2 :"+t);}}class GenericDemo5 {public static void main(String[] args) {InterImpl <String> i = new InterImpl<String>();i.show("haha");    //i.print("haha");  // 当函数没有自定义泛型时,只能传入与类泛型一致的泛型i.show(new Integer(2));//当函数有自定义泛型时 可以传入与类泛型不相同的泛型//i.print(new Integer(2)); 编译失败 //InterImpl i = new InterImpl();//i.show("haha");i.show2("haha");//i.show2(new Integer(2)); 编译失败 要求传入的 参数 是属于类泛型 (String)}}




	
				
		
原创粉丝点击