OCJP之泛型 尚未搞定 如有好的资源 请推荐。。。

来源:互联网 发布:冰川网络知乎 编辑:程序博客网 时间:2024/06/05 09:08

泛型可以加到类、方法中,作用域不用

1 范型最基本的应用

    规定指定容器存放元素的类型,如果不按照事先规定的类型存放,直接会报Compilation error

import java.util.*;class Snake {static List<String> s1 = new ArrayList<String>();}public class Chips extends Snake {public static void main(String[] args) {List c1 = new ArrayList();s1.add("1"); s1.add("2");c1.add("3"); c1.add("4");getStuff(s1, c1);}static void getStuff(List<String> a1, List a2) {for(String s1: a1) System.out.print(s1 + " ");//Below for-each cannot be compiled; a2 stored Object, cannot be converted to String;//for(String s2: a2) System.out.print(s2 + " ");} }


2 泛型编译与运行

    编译时看类型,运行时找对象....泛型编译时,自动擦除,不会报编译错误,只会有警告...

package com.ocjp.generic; import java.util.*; public class Salt { public static void main(String[] args) { Set s1 = new HashSet(); s1.add(0); // int放到了 Set s1;但是int被当成Object; s1.add("1");  // String放到了 Set s1;但是String被当成Object;// 调do2()时,将Object的Set传给了有约束的Set<Number>,编译时,泛型擦除;这样写是可以的。 doStuff(s1);} static void doStuff(Set<Number> s) { do2(s);Iterator i = s.iterator();while(i.hasNext()) System.out.print(i.next() + " ");Object[] oa = s.toArray(); for(int x = 0; x < oa.length; x++) System.out.print(oa[x] + " ");System.out.println(s.contains(0)); //true; 只有数字0,contains()本质也是调用的Integer.euqals();System.out.println(s.contains("0")); //false;System.out.println(s.contains("1")); //true;只有字符串1,contains()本质也是调用的String.euqals();}  static void do2(Set s2) { System.out.print(s2.size() + " "); } }

Output:

2 0 1 0 1 true
false
true


3 通配符


原创粉丝点击