• Java中的泛型


    泛型类和泛型方法的使用:类名<泛型>  方法名<泛型>

    public class MyClass<E> {
        public void print(E e) {
            System.out.println(e);
        }
    }
    public class GenericTest {
        public static void main(String[] args) {
            MyClass<String> myClass1 = new MyClass<>();
            myClass1.print("String"); // String
    
            MyClass<Integer> myClass2 = new MyClass<>();
            myClass2.print(111); // 111
        }
    }

    泛型接口和泛型方法的使用:接口名<泛型>  方法名<泛型>

    public interface MyInter<T> {
        public abstract void print(T t);
    }
    public class MyInterImpl2<T> implements MyInter<T> {
        @Override
        public void print(T t) {
            System.out.println(t);
        }
    }
    public class GenericTest {
        public static void main(String[] args) {
            MyInter<String> myInter2 = new MyInterImpl2<String>();
            myInter2.print("String"); // String
            MyInter<Integer> myInter3 = new MyInterImpl2<>();
            myInter3.print(111); // 111
    
            MyInter<String> myInter = new MyInter<String>() {
                @Override
                public void print(String s) {
                    System.out.println(s);
                }
            };
            myInter.print("字符串类型"); // 字符串类型
    
            new MyInter<Integer>() {
                @Override
                public void print(Integer integer) {
                    System.out.println(integer);
                }
            }.print(222); // 222
        }
    }

    泛型通配符:定义的时候不可以使用(ArrayList<?> list = new ArrayList<?>),只能作为参数传递时使用,表示可以接收任何泛型类型的参数

    public static void main(String[] args) {
            ArrayList<String> list1 = new ArrayList<>();
            list1.add("AA");
            list1.add("BB");
            list1.add("CC");
    
            ArrayList<Integer> list2 = new ArrayList<>();
            list2.add(111);
            list2.add(222);
            list2.add(333);
    
            print(list1); // AA BB CC
            print(list2); // 111 222 333
        }
    
        private static void print(ArrayList<?> list1) { // 泛型不会自动提升类型,所以这里泛型不能使用Object类型来接收所有泛型类型,只能用通配符?
            /*Iterator<?> iterator = list1.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }*/
    
            for (int i = 0; i < list1.size(); i++) {
                System.out.println(list1.get(i));
            }
        }

    通配符高级使用--受限泛型

      泛型的上限:

        格式:类型名称 <? extends 类> 对象名称

        意义:只能接收该类型及其子类

      泛型的下限:

        格式:类型名称<? super 类> 对象名称

        意义:只能接收该类型及其父类

    public static void main(String[] args) {
            ArrayList<Integer> integers = new ArrayList<>();
            ArrayList<String> strings = new ArrayList<>();
            ArrayList<Number> numbers = new ArrayList<>();
            ArrayList<Object> objects = new ArrayList<>();
    
            getElement1(integers);
            // getElement1(strings); // 报错
            getElement1(numbers);
            // getElement1(objects); // 报错
    
            // getElement2(integers); // 报错
            // getElement2(strings); // 报错
            getElement2(numbers);
            getElement2(objects);
        }
    
        private static void getElement1(ArrayList<? extends Number> integers) {
        }
    
        private static void getElement2(ArrayList<? super Number> integers) {
        }
  • 相关阅读:
    《图解HTTP》简单的HTTP协议
    《图解HTTP》web及网络基础
    尚硅谷--雷丰阳--ElasticSearch 7.4.2版本 -- 有道云笔记
    ElasticSearch _bulk批量插入报错
    SpringBoot利用Filter来解决跨域问题
    js中数组的常用方法
    Mysql时间加减函数
    mybatis映射文件中不能使用">""<""&"问题
    博客园样式第二版
    GO学习笔记之 map
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12089158.html
Copyright © 2020-2023  润新知