Generic泛型

来源:互联网 发布:qq视频网络不稳定 编辑:程序博客网 时间:2024/05/22 00:41
 泛型:JDK1.5版本出现的新特性,用于解决安全问题,是一个安全机制
 好处:
  1.将运行时期出现的问题ClassCastException,转移到编译时期,便于程序员解决问题
  2.避免了强制转换的繁琐


 在使用Java提供的对象时,什么时候写泛型?
 通常在集合框架中很常见,只要见到<>就要定义泛型
 其实<引用数据类型>就是用来接收类型的


 * 特殊之处:
 * 静态方法不可以访问类上定义的泛型(静态方法在类定义之时已经存在)
 * 如果静态方法操作的引用数据类型不确定,可以将泛型定义在静态方法上




 * 类上定义的泛型,整个类都有效
 * 方法上定义的泛型,只在方法内有效
 * 为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上
//类上定义的泛型作用域为整个类
class Demo<T>  {public void show(T t){System.out.println("show:"+t);}          //函数上定义的泛型作用域为整个函数内部public <Q>void print(Q q){System.out.println("print:"+t);}}----------------------------------------------------------------//定义在接口上的泛型interface Inter<T>{void show(T t);}//实现接口时因不明确类型,继续使用泛型class InterImpl<T> implements Inter<T>{public void show(T t){System.out.println("show:"+t);}} * ? 通配符(占位符) * 泛型的限定: * 1.  ? extends E:可以接收E类型或者E的子类型。上限 * 2.  ? super E:可以接受E类型或者E的父类型。下限//此处可传入Person及其子类对象public static void print(ArrayList<? extends Person> al){                //可接收Person及其子类对象for(Iterator<? extends Person> it =al.iterator(); it.hasNext();){System.out.println(it.next().getName());}}----------------------------------------------------------------//传入一个比较器comp(),提供TreeSet排序的依据TreeSet<Stu> ts = new TreeSet<Stu>(new comp());ts.add(new Stu("student04"));ts.add(new Stu("student01"));ts.add(new Stu("student03"));print(ts);//可传入Pepole及其子类对象class comp implements Comparator<Pepole>{        //复写compare比较方法@Overridepublic int compare(Pepole o1, Pepole o2) {//compareTo();是String类中的方法return o1.getName() . compareTo(  o2.getName()  ) ;}}

泛型示例

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>@Overridepublic int compare(String o1, String o2) {int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));if(num==0)return o1.compareTo(o2);return num;}------------------------------------------------------------------------------------------class Tool<E>{private E e;public void setObject(E e){this.e=e;}public E getObject(){return e;}}public class GenericDemo3 {public static void main(String[] args) {Tool<Worker> t = new Tool<Worker>();t.setObject(new Worker());Worker w = t.getObject();}}---------------------------------------------------------------------------------------public class GenericDemo6 {public static void main(String[] args) {ArrayList<Person> al1 = new ArrayList<Person>();al1.add(new Person("person01"));al1.add(new Person("person02"));al1.add(new Person("person03"));print(al1);ArrayList<Student> al2 = new ArrayList<Student>();al2.add(new Student("Student01"));al2.add(new Student("Student02"));al2.add(new Student("Student03"));print(al2);}public static void print(ArrayList<? extends Person> al){for(Iterator<? extends Person> it =al.iterator(); it.hasNext();){System.out.println(it.next().getName());}}}----------------------------------------------------------------------------------------------public class GenericDemo7 {public static void main(String[] args) {TreeSet<Stu> ts = new TreeSet<Stu>(new comp());ts.add(new Stu("student04"));ts.add(new Stu("student01"));ts.add(new Stu("student03"));print(ts);TreeSet<Workers> ts1 = new TreeSet<Workers>(new comp());ts1.add(new Workers("Worker03"));ts1.add(new Workers("Worker01"));ts1.add(new Workers("Worker05"));print(ts1);}public static void print(TreeSet ts){for(Iterator<Pepole> it = ts.iterator();it.hasNext();){System.out.println(it.next().getName());}}}class comp implements Comparator<Pepole>{@Overridepublic int compare(Pepole o1, Pepole o2) {return o1.getName().compareTo(o2.getName());}}


原创粉丝点击