通用集合遍历 泛型通配符

创建Person父类

package com.oracle.demo02;

public class Person {
    private String name;
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Person() {
        super();
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    public void work() {
        System.out.println("吃饭");
    }
}

创建Student子类

package com.oracle.demo02;

import java.util.ArrayList;
//泛型类
public class Student extends Person{public Student (String name,int age) {
        super(name,age);
    }
    public void work() {
        System.out.println("学习");
    }
}

创建Worker子类

package com.oracle.demo02;

public class Worker extends Person{
    public Worker(String name,int age) {
        super(name,age);
    }
    public void work() {
        System.out.println("工作");
    }
}

测试类

package com.oracle.demo02;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class Demo01 {
    public static void main(String[] args) {

        ArrayList<Student> arr=new ArrayList<Student>();
        arr.add(new Student("小红", 18));
        arr.add(new Student("小蓝", 18));

        HashSet<Worker> brr=new HashSet<Worker>();
        brr.add(new Worker("小红帽", 18));
        brr.add(new Worker("小蓝帽", 18));

        ArrayList<Person> crr=new ArrayList<Person>();
        crr.add(new Person("小小", 18));

        get(arr);
        get(brr);
        get(crr);
    }
    //通用的遍历集合的方法
    public static void get(Collection<? extends Person> col) {
        //  ?  泛型通配符
        //泛型里没有多态,只能用限定符限定
        // 泛型限定符      ? extends  E(父类名称)-->   设置上限(最大父类)
        // 泛型限定符      ? super  E(父类名称) -->  设置下限(最小父类)

        Iterator<?> it=col.iterator();

        while (it.hasNext()) {
            Person p=(Person)it.next();
            p.work();
            break;
        }
    }
}

.

原文地址:https://www.cnblogs.com/l1314/p/12108990.html

时间: 2024-10-29 11:39:34

通用集合遍历 泛型通配符的相关文章

java泛型通配符?

转自:http://www.linuxidc.com/Linux/2013-10/90928.htm T  有类型 ?  未知类型 一.通配符的上界 既然知道List<Cat>并不是List<Anilmal>的子类型,那就需要去寻找替他解决的办法, 是AnimalTrianer.act()方法变得更为通用(既可以接受List<Animal>类型,也可以接受List<Cat>等参数).在java里解决办法就是使用通配符"?",具体到Anim

java遍历泛型的方法

一.List遍历 Java中List遍历有三种方法来遍历泛型,主要为: 1.for循环遍历 2.iterator遍历 3.foreach遍历 package com.gmail.lsgjzhuwei; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.junit.Test; public class test { //第一种方法:for循环遍历 @Test public

集合框架(ArrayList存储自定义对象并遍历泛型版)

//集合框架(ArrayList存储自定义对象并遍历泛型版) package cn.itcast_02; import java.util.ArrayList; import java.util.Iterator; /* * 需求:存储自定义对象并遍历. * * A:创建学生类 * B:创建集合对象 * C:创建元素对象 * D:把元素添加到集合 * E:遍历集合 */ public class ArrayListDemo2 { public static void main(String[]

Java泛型通配符学习 —— Java Generic&#39;s Wildcards

Java Generic's wildcards is a mechanism in Java Generics aimed at making it possible to cast a collection of a certain class, e.g A, to a collection of a subclass or superclass of A. This text explains how. 理解:Java的泛型通配符机制旨在实现集合的类型转换.例如集合A,转换为A的子类集合或

JAVA 泛型通配符 ? EXTENDS SUPER 的用法

1. <? extends Hero> ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型heroList 的泛型可能是HeroheroList 的泛型可能是APHeroheroList 的泛型可能是ADHero所以 可以确凿的是,从heroList取出来的对象,一定是可以转型成Hero的 但是,不能往里面放东西,因为放APHero就不满足<ADHero>放ADHero又不满足<APHero> 2.

C# 遍历泛型集合

1 /// <summary> 2 /// 遍历泛型 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="obj"></param> 6 /// <returns></returns> 7 public static List<T> Abcdefg<T>

Java学习之道:简述泛型通配符&lt;? extends T&gt;和&lt;? super T&gt;

<? extends T>和<? super T>含有JAVA5.0的新的概念.由于它们的外表导致了很多人误解了它们的用途: 1.<? extends T>首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List<? extends T>吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用List<T>来表示?所以<? extends T>不是一个集合,而是T的某一种子类的意思,记

【Java】java 中的泛型通配符——从“偷偷地”地改变集合元素说起

一直没注意这方面的内容,想来这也算是基础了,就写了这个笔记. 首先java的通配符共有三种----先别紧张,现在只是粗略的过一下,看不看其实无所谓 类型 介绍 <?> 无限定通配符,等价于 <? extends Object> <? extends Number> 上限通配符,表示参数类型只能是 Number 或是 Number 的子类. <? super Number> 下限通配符,表示参数类型只能是 Number 或是 Number 的父类. 然后再让我

泛型通配符

1.通配符 泛型通配符有两种 上界通配符<? extends xx> 下界通配符<? super xx> 2.举例说明 先上代码吧 class A{ } class B extends A{ } class C extends A{ } public class NonCovariantGenerics { public static void main(String[] args) { List<? extends A> list1= new ArrayList<