zoukankan      html  css  js  c++  java
  • 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) {
        }
  • 相关阅读:
    Spark Locality Sensitive Hashing (LSH)局部哈希敏感
    Spark ChiSqSelector 卡方选择器
    图解开源协议
    如何使用Hasu USB to USB Controller Converter刷写tmk固件交换Caps和Ctrl
    使用PHP读取PHP文件并输出到屏幕上
    Mac修改显示器使支持原生缩放
    PHP中使用PDO的预处理功能避免SQL注入
    如何做数据库分页查询
    Chrome报错提示Unchecked runtime.lastError: The message port closed before a response was received.
    Parallels Desktop虚拟机无法关机提示“虚拟机处理器已被操作系统重置”
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12089158.html
Copyright © 2011-2022 走看看