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

带泛型声明的方法

主讲教师:王少华 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

来自为知笔记(Wiz)

时间: 2024-08-01 11:22:07

跟王老师学泛型(五): 自定义带泛型声明的方法的相关文章

跟王老师学集合(九)Java中hashCode方法与equals方法的用法

Java中对象比较 主讲人:王少华  QQ群号:483773664 学习目标: 掌握java中的==.equals().hashCode()的异同 一.问题 通过前面的学习,我们知道,Java集合有三个大的接口,List接口.Map接口.Set接口,这三个接口的特点是List接口中的元素能重复.Map接口中的key对象不能重复,Set接口中的元素是不可以重复的.那么问题来了,两个元素是否重复是根据什么来判断的. 二.Java中两个对象比较 (一).== 1.Java中,比较简单类型变量用"==&

跟王老师学注解(五):利用反射读取注解信息

跟王老师学注解(五):读取注解信息 主讲教师:王少华   QQ群号:483773664 一.注解被读取 (一)条件 当一个注解类型被定义为运行时注解后,该注解才是运行时可以见,当class文件被装载时被保存在class文件中的注解才会被Java虚拟机所读取. 要把@Retention注解的value成员变量的值设为RetentionPolicy.RUNTIME (二)办法 我们已知所有的注解都是继承的java.lang.Annotation接口,也就是说Annotation是所有接口的父接口.除

跟王老师学反射(五):使用反射生成并操作对象

跟王老师学反射(五):使用反射生成对象 主讲教师:王少华   QQ群号:483773664 学习内容 使用反射生成对象 模板类 一.创建对象 (一).非反射方法 (二).反射方式 通过构造方法生成对象,有二种方式,一种通过无参的构造方法,一种是通过有参的构造方法. 1.无参构造方法 1.1 如果无参数的构造方法是public 也可以使用Class对象的newInstance()方法来创建该Class对象对应类的实例 1.2 如果无参构造方法是私有化的 结论 如果无参构造访问,是私有化的,一定要使

跟王老师学注解(四):自定义注解

跟王老师学注解(四):自定义注解 主讲教师:王少华   QQ群号:483773664 到此,我们已经学习完了JDK提供的3种内建注解及4种元注解,下面来了解自定义注解 一.注解类型 (一)注解类型与接口:注解类型是一种接口,但它又不同于接口 1.注解类型使用关键字@interface而不是interface 1 2 public @interface TestAno { } @interface隐含继承java.lang.annotation.Annotation接口 2.注解类型的方法定义是独

跟王老师学泛型(八):泛型擦除与转换

泛型擦除与转换 主讲教师:王少华 QQ群:483773664 学习目标: 掌握泛型擦除的含义 理解泛型转换的规则 一.泛型擦除 (一)什么泛型擦除 Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节码中是不包含泛型中的类型信息的.也就是说虚拟机中没有泛型,只有普通类和普通方法 使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉.这个过程就称为类型擦除. 类型擦除的主要过程如下:     1.将所有的泛型参数用其最左边界(最顶级的父类型)类型替换.     2.移除所有

跟王老师学注解(二)注解的分类及内建注解

跟王老师学注解(二):注解的分类及内建注解 主讲教师:王少华   QQ群号:483773664 一.注解的分类 在Java中,根据注解的使用方法和用途,可将注解分成3类,分别是 内建注解(也称为基本注解),定义于java.lang包下 元注解(Meta Annotation) 自定义注解 二.内建注解 (一)分类 在JDK5.0及以上的版本的java.lang包下提供了3种标准的注解类型,分别是 @Override: @Deprecated @SuppressWarnings (二)@Overr

跟王老师学MySQL:单表查询

跟王老师学MySQL:单表查询 主讲教师:王少华   QQ群号:483773664 学习内容 查询所有字段 查询指定字段 查询指定记录 带in关键字的查询 带between and关键字的查询 带like关键字的查询 查询空值 带and的多条件查询 带or的多条件查询 查询不重复记录 对查询结果进行排序 单表查询是指从一张表中查询所需要的数据.查询数据时,可以从一张表中查询数据,也可以从多张表中同时查询数据.两者的查询方式上有一定的区别.因为单表查询只在一张表上进行操作,所以查询比较简单. 一.

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

跟王老师学MySQL:配置MySQL

跟王老师学MySQL:配置MySQL 主讲教师:王少华   QQ群号:483773664 学习内容 学会配置免安装版的MySQL 一.配置环境变量path 测试配置是否成功 二.修改配置文件 配置文件名称:my-default.ini 路径:D:\mysql-5.7.13 设置的内容:字符编码.mysql所在目录.数据库所在目录.端口号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

跟王老师学MySQL:MySQL数据类型之小数类型

跟王老师学MySQL:MySQL数据类型之小数类型 主讲教师:王少华   QQ群号:483773664 学习内容 小数类型有哪些以及它们的取值范围 定义语法中的M和D的含义 定点型和浮点型的区别 一.简介 MySQL中使用浮点数类型和定点数类型来表示小数. 浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型). 定点数类型就是DECIMAL型. 二.字节数.取值范围 三.定义语法 1 类据类型 (M,D) M:精度,数据的总长度 D:标度,小数点后的长度 注: 小数点不占长