zoukankan      html  css  js  c++  java
  • 泛型

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

    泛型类

    泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

    泛型类的最基本写法

    //此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
    //在实例化泛型类时,必须指定T的具体类型
    public class Generic<T>{ 
        //key这个成员变量的类型为T,T的类型由外部指定  
        private T key;
    
        public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
            this.key = key;
        }
    
        public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
            return key;
        }
    }

    泛型接口

    型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中,可以看一个例子:

    //定义一个泛型接口
    public interface Generator<T> {
        public T next();
    }

    泛型方法

    泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。

    /**
     * 泛型方法的基本介绍
     * @param tClass 传入的泛型实参
     * @return T 返回值为T类型
     * 说明:
     *     1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
     *     2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
     *     3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
     *     4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
     */
    public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
      IllegalAccessException{
            T instance = tClass.newInstance();
            return instance;
    }

    泛型上下边界

    在使用泛型的时候,我们还可以为传入的泛型类型实参进行上下边界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。

    为泛型添加上边界,即传入的类型实参必须是指定类型的子类型

    public void showKeyValue1(Generic<? extends Number> obj){
        Log.d("泛型测试","key value is " + obj.getKey());
    }

    小练习:设计一个泛型获取数组最小值的函数,并且这个方法只能接受Number的子类并实现comparable接口

    // 设计一个泛型获取数组最小值的函数,并且这个方法只能接受Number的子类并实现comparable接口
        public static <T extends Number & Comparable<? super T>>T min(T[] array) {
            if (array != null && array.length > 0) {
                T min = array[0];
                for(int i = 0; i< array.length; i++) {
                    if (array[i].compareTo(min) < 0) {
                        min = array[i];
                    }
                }
                return min;
            }
            return null;
        }

    更多内容,请参考:https://www.cnblogs.com/coprince/p/8603492.html

  • 相关阅读:
    HDU 2149 Public Sale 博弈
    HDU 1850 Being a Good Boy in Spring Festival 博弈
    HDU 2176 取(m堆)石子游戏 博弈
    HDU 1517 A Multiplication Game 博弈
    HDU 2897 邂逅明下 博弈
    51nod 1445 变色DNA 最短路
    cocos creator中粒子效果的使用
    如何在cocos中为节点添加监听事件
    C++中STL常用容器的优点和缺点
    数据库链接池c3p0的配置
  • 原文地址:https://www.cnblogs.com/rain-in-summer/p/12751931.html
Copyright © 2011-2022 走看看