码迷,mamicode.com
首页 > 编程语言 > 详细

[JAVA] 9. JAVA中的泛型

时间:2020-04-26 01:33:54      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:int   还需要   push   code   代码   return   stat   utils   new   

泛型类

当我们需要创建一个类,其中的参数类型,需要后期给定的时候,就需要重新更改类型,再次创建,如下:

public class List {
    private int[] items = new int[10];
    private int count;
    public void push(int item){
        items[count++] = item;
    }

    public int get(int index) {
        return items[index];
    }
}

当我们这里想要一个UserList的时候,需要将元素的类型改为User,这样还需要重复创建结构一样的类,显然有些冗余,那么如何解决这个问题,一个很poor的方法,就是声明类型时,把元素类型定为Object,这样可以传入所有类型的变量。

public static void main(String[] args) {
        var objectList = new ObjectList();
        objectList.push(1);
        objectList.push("123");
        objectList.push(new User());
        int first = (int) objectList.get(1);
//        System.out.println(objectList.get(2));
    }

但是在使用变量的时候,如果需要根据类型选择,在编写代码上会较为复杂。


下面使用泛型定义

public class GenericList<T> {
    private T[] items = (T[]) new Object[10];
    private int count;
    public void push(T item){
        items[count++] = item;
    }

    public T get(int index) {
        return items[index];
    }
}

之后在main中创建调用。

public class Main {

    public static void main(String[] args) {
        var list = new GenericList<Integer>();
        list.push(1); //boxing
        list.get(0); //unboxing

    }
}

可以看到T赋值为了包装类Integer,但是传入参数的时候,是一个int类型的原始变量,这里编译器会默认调用包装类,进行包装,当获取这个元素的时候,会进行解包。

泛型函数

可以不将类声明为泛型,只将其中的函数声明为泛型函数,如下面的工具类中的函数:

比较数字

public class Utils {
    // 在工具类方法中,常声明为static,这样就不用实例化了
    public static int max(int first, int second) {
        return (first > second) ? first : second;
    }
}

比较泛型函数

public class Utils {
    // 在工具类方法中,常声明为static,这样就不用实例化了
    public static <T extends Comparable<T>> T max(T first, T second) {
        return (first.compareTo(second)>0) ? first : second;
    }
}

这里需要将参数类型写做 T ,将返回值类型写作 T ,并注意,要加入泛型声明<T>,为了比较两个对象,这个泛型需要继承Comparable接口,并将接口的泛型设置为T,之后函数体内可以调用参数为T类型的compareTo函数。

[JAVA] 9. JAVA中的泛型

标签:int   还需要   push   code   代码   return   stat   utils   new   

原文地址:https://www.cnblogs.com/modai/p/12776354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!