zoukankan      html  css  js  c++  java
  • Java开发知识之Java中的泛型

            Java开发知识之Java中的泛型

    一丶简介什么是泛型.

        泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了.

    这样是可以的.

    二丶Java中的泛型

      Java中,所有类的父类都是Object类.所以定义泛型的时候,设计长须的话传入的值与返回的值都是Object类型为主.如果是用具体的实例,就要进行转换了.具体参考向上转型,跟向下转型.

    JDK 1.5版本才有了泛型机制.

    语法如下:

      

    class 类名<T >{
        public T a;
        public T b;
            
        public void SetNumber(T Number){
             this.a = Number;
        } 
    }

    可以看到.其实数据类型都用T替换了. T我们可以定义为任何都是可以的.它只是代表一个类型而已.

    使用的时候传入数据类型

    创建实例:

      类名<T> a = new 类名<T>(); 

       int count = a.Add(10,11); 

    泛型可以传递多个泛型.可以代表更多的泛型.

    代码如下:

      

    public class Number<T,T1,T2> {
    
        private T a;
        private T1 b;
        private T2 c;
        
        public Number() {
            // TODO 自动生成的构造函数存根
        }
        public void SetNumber(T Number) {
            this.a = Number;
        }
        
    
    }
    使用:
        类名<T,T1> a = new <T,T1>();

    我们可以看到.使用泛型的时候我们需要传递数据类型.去初始化这个类.这样的话这个类就叫做泛型类.

    这中类型的类不会触发 ClasCastException异常的.因为在编译器中就可以检查类型匹配是否正确.

    PS: 定义泛型类的时候.泛型名称一般是T来表达. 而容器的元素.,就使用E来表达.具体设置我们可以查询JDK 5.0以上的API看.

    三丶泛型中需要注意的地方.

      1.成员变量是数组

        当成员变量是数组.我们可以定义数组,例如:

        public T a[] ;

        但是不能对其初始化 

        public T a[] = new T[10]; 这是错误的.

        此时,我们只能设置Set方法.为数组赋值.

        public void SetArray(T[] array) {

                     this.a = array;

        }

      而常规类可以

        public int a[] = new int[10];

      2.泛型类限制

    我们的泛型类可以对其做限制.比如你必须继承某各类.或者实现某个借口才能使用这个类

    具体语法;

      

    public class <T extends AnyClass/Intface>

    无论你是借口还是类.我们都要加上extends才可以. 意思就是说.如果指定了类.那么必须继承这个类你才能用.

    如果传入接口.那么你必须实现这个接口才行.

    使用:

      类名<类/接口> a = new 类名<类/接口>();

    `3.类型通配符

       Java中针对泛型的限制,提供了类型通配符. 作用就是创建一个泛型类的对象的时候.

    限制一下.这个泛型类的类型实现.或者继承某个接口,或类的子类.

    简而意之就是常见对象的时候.我可以限制你.你必须实现那个类. 或者实现那个接口.

    代码如下:

      

    类名<? extends list> a = null; 泛型的话表示类型位未知
    需要使用泛型对象的时候.单独实例化.
    a = new A<ArrayList>();
    
    ArrayList 是 List的子类. 意思就是.我可以在new对象的时候.传入它的子类.
    或者某一类是实现指定接口的类.

    总结: 总结来说,就是限制实例化, 如果指定了某一个类.那么创建实例的时候可以是它的子类. 如果指定了接口

    那么可以是实现它接口的类都是可以的.

    四丶泛型类的继承

       我们的泛型类可以继承.跟普通类一样.只不过过了泛型而已. 泛型类也可以继承普通类.

    语法:

      

    public class Father<T>{
    }
    public class Child<T1,T2> extends Father<T>{
    }

    我们的Child子类.继承父类的时候,指明了它的泛型类型.如果不指定.则Child中的 泛型 (T1,T2)

    都会自动的变成Object. 所以一般的情况下.都会保留父类的泛型.也就是指明一下.

    五丶泛型总结

      1.Java中的泛型是Object.可以在类声明上指明

        1.类声明

            class <T> {};

        2.成员变量成名

            public T a;

        3.成员方法声明

          public T AAA(T a, T b){}

      2.泛型注意

        泛型中,数组可以声明,但是不能对其初始化.或者new内存,比如提供方法.对其赋值.

      3.Java中的其他语法

        3.1 泛型限制

          泛型中可以限制你必须继承某各类,并且传入的时候.比如是这个类.

    语法:

      public class Test<T extends 类/接口>{}

      Test<类/接口> a = new Test<类/接口>();

        3.2泛型限制,可以实现子类或者接口

          在泛型限制的前提下.我们可以使用通配符.来表示一个类.这个类可以是我们指定的限制类的子类. 如果是接口,那么可以是实现接口的类.

    语法:

      class Test<? extends List>{};

    使用:

      Test <ArrayList> a = new Test<ArrayList>();  

      ArrayList是list的子类,满足 ? 这个通配符. 

      

      

      

  • 相关阅读:
    zoj 3792 Romantic Value
    uva 563
    uva 10779 Collectors Problem 网络流
    什么是撞库,如何预防撞库攻击?
    linux install redis-cli
    python远程调试及celery调试
    python HttpServer共享文件
    python引用,浅复制,深复制
    redis 查询key数量
    ubuntu查询可用安装包
  • 原文地址:https://www.cnblogs.com/iBinary/p/9818724.html
Copyright © 2011-2022 走看看