泛型:用于解决安全问题,是一个类型安全机制。
好处:
1.将运行时期出现问题ClassCastException,转移到编译期,方便于解决问题,让运行时问题减少,更安全。
2.避免强制转换的麻烦。
泛型格式:通过<>来定义要操作的应用数据类型。
通常在集合框架中很常见,只要见到<>就要定义泛型。
<>是用于接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。如同函数中传递参数。
import java.util.*; 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 SLenCompare()); ts.add("abcd"); ts.add("aa"); ts.add("bcd"); ts.add("aaa"); ts.add("z"); Iterator<String> it = ts.iterator(); while(it.hasNext()) { String s = it.next(); System.out.println(s+":"+s.length()); } } } class SLenCompare implements Comparator<String> { public int compare(String s1,String s2) { int num = s2.length()-s1.length(); if(num == 0) return s2.compareTo(s1); return num; } } //abcd:4 //bcd:3 //aaa:3 //z:1
import java.util.*; class GenericDemo { public static void main(String[] args) { ArrayList<String> a1 = new ArrayList<String>(); a1.add("abc1"); a1.add("abc2"); a1.add("abc3"); ArrayList<Integer> a2 = new ArrayList<Integer>(); a2.add(2); a2.add(5); a2.add(8); printColl(a1); printColl(a2); } /* public static void printColl(ArrayList<?> { Iterator<?> it = a.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }*/ public static <T> void printColl(ArrayList<T> a) { Iterator<T> it = a.iterator(); while(it.hasNext()) { //T t = it.next(); System.out.println(it.next()); } } }
/*区别:
* <T>代表具体类型,后面可以直接接收并操作此类型。T t = it.next();
* <?>不明确类型,"?"是占位符.有扩展性,但不能使用类型特有方法。sop(it.next().length());
*/
泛型限定
? 通配符,也可为占位符。
? extends E:可以接收E类型或者E类型的子类型。上限。
? super E:可以接收E类型或者E类型的父类型。下限。
import java.util.*; class GenericDemo { public static void main(String[] args) { /* ArrayList<Person> a = new ArrayList<Person>(); a.add(new Person("abc1")); a.add(new Person("abc2")); a.add(new Person("abc3")); printColl(a); */ ArrayList<Person> a = new ArrayList<Person>(); a.add(new Student("abc1")); a.add(new Student("abc2")); a.add(new Student("abc3")); printColl(a); } public static void printColl(ArrayList<? extends Person> a) { //<? extends Person>泛型限制。只能接收Person及其子类 Iterator<? extends Person> it = a.iterator(); while(it.hasNext()) { System.out.println(it.next().getName()); } } } class Person { private String name; Person(String name) { this.name = name; } public String getName() { return name; } } class Student extends Person { Student(String name) { super(name); } } import java.util.*; class GenericDemo { public static void main(String[] args) { TreeSet<Student> ts = new TreeSet<Student>(new Comp()); ts.add(new Student("abc01")); ts.add(new Student("abc03")); ts.add(new Student("abc02")); ts.add(new Student("abc04")); Iterator<Student> it = ts.iterator(); while(it.hasNext()) { System.out.println(it.next().getName()); } TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp()); ts1.add(new Worker("w--abc01")); ts1.add(new Worker("w--abc02")); ts1.add(new Worker("w--abc03")); ts1.add(new Worker("w--abc04")); Iterator<Worker> it1 = ts1.iterator(); while(it1.hasNext()) { System.out.println(it1.next().getName()); } } } class Comp implements Comparator<Person> { public int compare(Person p1,Person p2) { return p2.getName().compareTo(p1.getName()); } } class Person { private String name; Person(String name) { this.name = name; } public String getName() { return name; } public String toString() { return "Person:"+name; } } class Student extends Person { Student(String name) { super (name); } } class Worker extends Person { Worker(String name) { super(name); } }
java基础笔记(三--泛型)
最新推荐文章于 2024-08-14 22:11:14 发布