美文网首页Java
Java19-5.2 泛型通配符及限定上下线

Java19-5.2 泛型通配符及限定上下线

作者: 第二套广播体操 | 来源:发表于2019-01-15 12:13 被阅读0次
    public class Generic_Test6 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<>();
            list.add("abc1");
            list.add("abc2");
            list.add("abc3");
            list.add("abc4");
            printCollection(list);
            Set<String> set=new TreeSet<>();
            set.add("abc1");
            set.add("abc2");
            set.add("abc3");
            set.add("abc4");
            printCollection(set);
        }
    
        private static void printCollection(Collection<String> collection) {
            for (Iterator<String> iterator = collection.iterator(); iterator.hasNext(); ) {
                String s = iterator.next();
                System.out.println(s);
            }
        }
    }
    

    为了同时可以迭代两个集合 我们将迭代范围改到Collection
    但是此时我们依然无法迭代类型为学生的集合

     List<Student> list1=new ArrayList<>();
            list1.add(new Student());
            list1.add(new Student());
            list1.add(new Student());
            list1.add(new Student());
            printCollection(list1);
    

    所以我们引入通配符<?>

    //通配符<?>不明确传递参数类型
        private static void printCollection(Collection<?> collection) {
            for (Iterator<?> iterator = collection.iterator(); iterator.hasNext(); ) {
                Object o = iterator.next();
                System.out.println(o);
            }
        }
    

    上限应用

    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Gerneric_Test7 {
        public static void main(String[] args) {
            ArrayList<MStudent> list=new ArrayList<>();
            list.add(new MStudent("as",20));
            list.add(new MStudent("a2",10));
            list.add(new MStudent("as",19));
            TreeSet<Student> set=new TreeSet<Student>(list);
            for (Iterator<Student> iterator = set.iterator(); iterator.hasNext(); ) {
                Student next = iterator.next();
                System.out.println(next);
            }
    
        }
    }
    

    下限应用

    public class Generic_Test8 {
        public static void main(String[] args) {
            Comparator<Student> comparator=new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    int temp=o1.getName().compareTo(o2.getName());
                    return temp==0? o1.getAge()-o2.getAge():temp;
                }
            };
            TreeSet<MStudent> set1=new TreeSet<>(comparator);
            set1.add(new MStudent("asd1",12));
            set1.add(new MStudent("zxcw",15));
            set1.add(new MStudent("xczx",13));
            set1.add(new MStudent("awqs",18));
            TreeSet<HStudent> set2=new TreeSet<>(comparator);
            set2.add(new HStudent("zxcz",12));
            set2.add(new HStudent("qwes",14));
            set2.add(new HStudent("zxwq",15));
            set2.add(new HStudent("zxcw",23));
            TreeSet<Student> set3=new TreeSet<>(comparator);
            set3.addAll(set1);
            set3.addAll(set2);
            for (Iterator<Student> iterator = set3.iterator(); iterator.hasNext(); ) {
                Student next = iterator.next();
                System.out.println(next);
            }
    
            }
        }
    
    

    相关文章

      网友评论

        本文标题:Java19-5.2 泛型通配符及限定上下线

        本文链接:https://www.haomeiwen.com/subject/yioedqtx.html