• 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);
        }
    }
  • 相关阅读:
    SQL Server 2005中 with as 使用介绍
    论信息系统项目的整体管理
    自定义控件的使用以及与用户控件的区别
    Sql Server2005 TransactSQL 新兵器学习总结之DDL触发器
    我的大学系分之路
    C#序列化与反序列化(Serializable and Deserialize)
    父子节点树形数据输出
    自定义枚举类型注释属性,并在程序中获取
    SSAS没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 解决办法
    对ASP.NET网站的服务器端压缩
  • 原文地址:https://www.cnblogs.com/bananafish/p/9825704.html
Copyright © 2020-2023  润新知