IT干货网

集合之泛型

lxf 2022年03月12日 编程设计 195 0

集合之泛型

未使用泛型

以下代码没有使用泛型:

package com.javalearn.generic; 
 
import com.sun.org.apache.bcel.internal.generic.INSTANCEOF; 
 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
 
public class TestForgeneric { 
    public static void main(String[] args) { 
        List myList = new ArrayList(); 
        Animal a = new Animal(); 
        myList.add(a); 
        Iterator it = myList.iterator(); 
        while (it.hasNext()) { 
            Object obj = it.next();  //obj无法调用move方法,必须向下转型 
            if (obj instanceof Animal) { 
                Animal a2 = (Animal) obj;  // 转型 
                a2.move(); 
            } 
        } 
    } 
} 
 
class Animal { 
    public void move() { 
        System.out.println("动物在动"); 
    } 
} 

输出结果:

动物在动 

使用泛型

下面使用泛型改进上面的代码:

package com.javalearn.generic; 
 
import com.sun.org.apache.bcel.internal.generic.INSTANCEOF; 
 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
 
public class TestForgeneric { 
    public static void main(String[] args) { 
        List<Animal> myList = new ArrayList<Animal>();  // 只能存Animal,new后面的Animal可省略 
        Animal a = new Animal(); 
        myList.add(a); 
        Iterator<Animal> it = myList.iterator(); 
        while (it.hasNext()) { 
            Animal obj = it.next();  // 使用泛型后每次都返回Animal类型 
            obj.move(); 
        } 
    } 
} 
 
class Animal { 
    public void move() { 
        System.out.println("动物在动"); 
    } 
} 

输出结果:

动物在动 

自定义泛型

以下代码使用自定义泛型:

package com.javalearn.diygeneric; 
 
public class TestFordiyGenric { 
    public static void main(String[] args) { 
        People<String> p = new People<>();  // String为实际的atype,若定义了泛型但不使用泛型则默认为Object 
        p.write("一堆字"); 
    } 
} 
 
class People<atype> {  // atype为自定义泛型,只是一个符号,随便写,一般写E和T 
    public void write(atype o) {  // 规定此方法只能传atype这一种类型的参数 
        System.out.println("写了:"+o); 
    } 
} 

输出结果:

写了:一堆字 

增强for循环

有了泛型,便于使用增强for循环遍历集合:

package com.javalearn.foreach; 
 
import java.util.ArrayList; 
import java.util.List; 
 
public class TestForEach { 
    public static void main(String[] args) { 
        List<String> strList = new ArrayList<>(); 
        strList.add("good"); 
        strList.add("bad"); 
        for (String s:strList) {  // 元素:集合 
            System.out.println(s); 
        } 
    } 
} 
 

输出结果:

good 
bad 

评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!