跟王老师学泛型: 自定义带泛型声明的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学泛型: 自定义带泛型声明的方法相关的知识,希望对你有一定的参考价值。

带泛型声明的方法

主讲教师:王少华 QQ群:483773664

学习目标:

  1. 掌握泛型方法的定义

  2. 掌握泛型方法的使用

一、需求

假设需要实现这样一个方法,该方法负责将一个Object数组的所有元素添加到一个Collection集合中。


1
2
3
4
5
6
7
8
9
10
/**
     * 将array中的元素添加到colleciotn中
     * @param array
     * @param c
     */
    public void fromArrayToCollection(Object[] array,Collection<Object> c){
        for (Object object : array) {
            c.add(object);
        }
    }

上面定义的方法没有任何问题,关键在于上面方法中的c的开通,它的数据类型是Collection<Object>。正如前面所介绍的,Collection<Object>不是Collection<String>类的父类,所以这个方法的功能非常有限。比如下面的情况就会引发编译错误:

技术分享

二、泛型方法

方法,也可以被泛型化,不管此时定义在其中的类是不是泛型化的。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。

(一)、语法 

1
2
修饰符 <T,S> 返回值类型 方法名(形参列表){
}

泛型方法的语法跟普通方法的语法不同之处在于:多了类型形参声明,类型形参声明以尖括号括起来,多个类型形参之间以逗号隔开,所有类型形参声明放在方法修饰符和方法返回值类型之间。

(二)参考代码

1
2
3
4
5
6
7
8
9
10
/**
     * 将array中的元素添加到colleciotn中
     * @param array
     * @param c
     */
    public <T> void fromArrayToCollection(T[] array,Collection<T> c){
        for (T t : array) {
            c.add(t);
        }
    }

(三)测试

1
2
3
4
5
6
7
8
9
10
11
12
public class GenericTest {
    public static void main(String[] args) {
        Needs needs = new Needs();
        String[] names = {"孙悟空","猪八戒","沙悟净"};
        List<String> c = new ArrayList<String>();
        needs.fromArrayToCollection(names, c);
         
        Double[] doubles = {2.14,3.14};
        List<Double> doubleList = new ArrayList<Double>();
        needs.fromArrayToCollection(doubles, doubleList);
    }
}

四、泛型方法:静态泛型方法

1
2
public static <T> void show(T t){
}

五、学习视频网址:

http://edu.51cto.com/course/course_id-6083.html











以上是关于跟王老师学泛型: 自定义带泛型声明的方法的主要内容,如果未能解决你的问题,请参考以下文章

跟王老师学泛型:定义泛型接口及实现

跟王老师学泛型:类型通配符

跟王老师学泛型:泛型的应用

跟王老师学泛型使用泛型

跟王老师学泛型:限制通配符

跟王老师学泛型:Java自动装箱与拆箱