java 泛型,
分享于 点击 5663 次 点评:251
java 泛型,
JDK1.5版本以后出现的新特性,用于解决安全问题,时一种安全机制。
好处:
1.将运行时出现的问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行问题减少,安全。
2.避免了强制转换的麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
public class GenericDemo { public static void main(String[] args) { TreeSet<String> ts = new TreeSet<String>(new MyComparetor()); ts.add("s"); ts.add("fff"); ts.add("hdh"); ts.add("oamsc"); Iterator<String> it = ts.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } class MyComparetor implements Comparator<String> { @Override public 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; } }
泛型类:
当类中操作的引用数据类型不确定的时候,早期定义Object来完成扩展。
现在定义泛型来完成扩展。
泛型方法:
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有方法要操作的类型就已经固定了。
为了让不同方法操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
静态方法不可以访问 类上定义的泛型。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
T:代表具体类型
?:不明确类型,占位符。
public class GenericDemo { public static void main(String[] args) { ArrayList<String> ts = new ArrayList<String>(); ts.add("s"); ts.add("fff"); ts.add("hdh"); ts.add("oamsc"); ArrayList<Integer> ts1 = new ArrayList<Integer>(); ts1.add(1); ts1.add(2); ts1.add(3); ts1.add(4); printList(ts); printList_1(ts); printList(ts1); printList_1(ts1); } public static void printList(ArrayList<?> al) { Iterator<?> it = al.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } public static <T> void printList_1(ArrayList<T> al) { Iterator<T> it = al.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
类型限定:
?:通配符,可以理解为占位符。
<? extends E>:可以接收E类型或者E子类类型,上限。
<? super E>:可以接收E类型或者E父类类型,下限。
相关文章
- 暂无相关文章
用户点评