• java学习----泛型


    目录

      1.泛型的定义

      2.泛型的使用

       3.泛型通配符

    一、泛型的定义

      泛型是java5的新特性,使用泛型会让程序编写简单安全,在编译的时候就会检查类型是否安全

      定义:所谓泛型就是允许在定义类、接口和方法使用参数类型这个类型形参可以在声明变量、

    创建对象、调用方法时动态指定(类型实参)泛型的参数类型只能是引用类型,不能是基本类型

      

    二、泛型的使用

      1.泛型接口

        泛型接口格式:

          修饰符 interface 接口名<T...>{}

          泛型接口Demo:

    public interface Action<E> {
        //在接口中使用泛型E
        E getE();
        //在接口中使用泛型抽象方法
        <T> T getT(int i);
    }

      2.泛型类

        泛型类格式:

          修饰符  class 类名<T...>{

          使用T; }    

            泛型类Demo:

    //类上声明泛型E
    public class ActionImpl<E>{
        //声明E类型变量
        private E e;
        //使用E类型
        public E getE() {
            // TODO Auto-generated method stub
            return e;
        }
        public ActionImpl(E e){
            this.e = e ;
        }
        
    }

      3.泛型方法

        泛型方法格式:

          修饰符<T...> 返回值 方法名 (参数列表){

            使用T; }

            泛型方法Demo:

    public class GenericWay {
        //方法上声明泛型T类型
        public static <T> T get(T t){
            return t;
        }
    }

    三、泛型通配符

      泛型通配符的符号是?

      普通的泛型与泛型通配符的泛型Class<T>与Class<?>的区别在于:

      Class<T> :在实例化的时候,T需要替换成具体的类型
      在泛型类、方法中可以使用T,还可以操作T类型的变量

      Class<?>:他是通配符,?可以表示任何类型(使用了泛型)

      泛型通配符可以匹配任意类型。

      泛型通配符Demo:

      

    import java.util.ArrayList;
    import java.util.List;
    
    public class GWC {
        //参数是list,list里的类型可以是任意类型
        public void forList(List<?> l){
            for (Object object : l) {
                System.out.println(object);
            }
        } 
        public static void main(String[] args) {
            GWC gwc = new GWC();
            List<Integer> l1 = new ArrayList<>();
            l1.add(1);
            l1.add(2);
            gwc.forList(l1);
            List<String> l2 = new ArrayList<>();
            l2.add("1");
            l2.add("2");
            gwc.forList(l2);
        }
    }

        通配符上限

         举个栗子:

            List<? extends Number>  这么声明的数只能是number类型或number类型的子类

          通配符上限Demo:

            

    import java.util.ArrayList;
    import java.util.List;
    
    public class GWCTop {
        public void forList(List<? extends Number> l){
            for (Number number : l) {
                System.out.println(number);
            }
        }
        
        public static void main(String[] args) {
            GWCTop gwcTop = new GWCTop();
            //Object 类型是number类型的父类编译报错;
            //List<Object> list = new ArrayList<>();
            //String 类型不是number编译器报错;
            //List<String> list = new ArrayList<>();
            List<Number> list = new ArrayList<>();
            gwcTop.forList(list);
        }
    }

        通配符下限

          举个栗子:

            List<? super Number> 这么声明的数只能是number类型或number类型的父类

            通配符下限Demo:

    import java.util.ArrayList;
    import java.util.List;
    
    public class GWCUnder {
        public void forList(List<? super Number> l){
            for (Object object : l) {
                System.out.println(object);
            }
        }
        public static void main(String[] args) {
            GWCUnder gwcUnder = new GWCUnder();
            //Integer 类型是Number类型的父类,编译不通过;
            //List<Integer> list = new ArrayList<>();
            //String 类型不是Number类型的父类,编译不通过;
            //List<String> list = new ArrayList<>();
            List<Object> list = new ArrayList<>();
            gwcUnder.forList(list);
        }
    }
  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/bananafish/p/9825704.html
Copyright © 2020-2023  润新知