泛型:JDK1.5版本号以后出现新特性。
当类中要操作的引用数据类型不确定的时候,早期定义Object来完毕扩展。如今定义泛型来完毕扩展。
通常在集合框架中非经常见,仅仅要见到<>就要定义泛型。事实上<> 就是用来接收类型的。
泛型使用:
定义泛型类
用于解决安全问题,是一个类型安全机制。
优点:
1.将执行时期出现故障ClassCastException转移到了编译时期,方便程序猿解决这个问题。让执行时问题降低,安全。
2,避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
当类中要操作的引用数据类型不确定的时候,早期定义Object来完毕扩展。如今定义泛型来完毕扩展。
通常在集合框架中非经常见,仅仅要见到<>就要定义泛型。事实上<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为參数传递到<>中就可以。
比方说:
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 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> { 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; } } //泛型类。 /* 什么时候定义泛型类? 当类中要操作的引用数据类型不确定的时候, 早期定义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>(); u.setObject(new Worker()); Worker w = u.getObject();; /* Tool t = new Tool(); t.setObject(new Student()); Worker w = (Worker)t.getObject(); */ } }