跟王老师学泛型(九):泛型拾遗

泛型拾遗

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

学习目标

  1. 掌握泛型方法与类型通配符的区别
  2. 泛型与方法重载
  3. 泛型与数组

一、泛型方法和类型通配符的区别

(一)大多数时候,可以使用泛型方法来替换类型通配符

比如这样一个需求:定义一个方法,接收一个任意集合,并打印出集合中的所有元素。泛型方法和类型通配符都可以实现


1

2

3

4

5

6

7

8

9

10

11

12

13

public class Need {

    public <T> void printCollection(Collection<T> c){

        for (T t : c) {

            System.out.println(t);

        }

    }

    

    public void printCollection2(Collection<?> c){

        for (Object object : c) {

            System.out.println(object);

        }

    }

}

(二)有时候,我们可以同时使用泛型方法和通配符


1

2

public <T> void copy(List<T> dest,List<? extends T> src){

}

当然上面的方法也可以改写成泛型方法


1

2

3

public <T ,E extends T> void copy2(List<T> dest,List<E> src){

        

    }

(三)类型可以定义变量


1

2

3

4

5

public <T> void printCollection(Collection<T> c){

    for (T t : c) {

        System.out.println(t);

    }

}

(四)set<E>只允许放E类型的元素,set<?>等于set<? extends Object>,只能取元素不能放元素

add(E)

二、泛型方法与方法重载

方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。

(一)第一情况:泛型的上下限

因为泛型既允许设定通配符的上限,也允许设定通配符的下限

那么下面的二个方法是方法重载吗?


1

2

3

4

5

public <T> void copy(List<T> dest,List<? extends T> src){

}

    

public <T> void copy(List<? super T> dest,List<T> src){

}

原因


1

2

3

4

5

6

7

8

public class Test {

    public static void main(String[] args) {

        List<Number> c = new ArrayList<Number>();

        List<Integer> c1 = new ArrayList<Integer>();

        Need need = new Need();

        need.copy(c, c1);

    }

}

编译器无法确定调用哪个方法了。

当然上面的二个方法在编译的时候,就无法通过了!

(二)泛型指定类型不一样


1

2

3

4

public void method(List<String> list) {

}

public void method(List<Integer> list) {

}

这种写法是不正确的,编译无法通过。

这是因为从Java语言层面来说,方法重载依赖于相同的方法名、不同的参数个数、类型、顺序,而List<Integer>和List<String>类型擦除后都为List<E>,从而不符合方法重载的要求。

注:

在jdk6及以下的版本,以下代码编译是会通过的,jdk7,编译不会通过,jdk8编译也会通过


1

2

3

4

5

6

7

public String test(List<String> list) {

        return "";

}

public int test(List<Integer> list) {

    return 1;

}

三、泛型与数组

(一)、Java不支持泛型的数组对象

1、不能创建持有泛型的数组对象

2、正确定义方法

3、取值

时间: 2024-11-05 21:34:06

跟王老师学泛型(九):泛型拾遗的相关文章

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

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

跟王老师学反射(九):反射应用小案例--进行对象拷贝

跟王老师学反射(九):反射应用小案例--进行对象拷贝 学习内容 一.需求 二.参考代码 (一)Customer:标准JavaBean (二)方法编写 来自为知笔记(Wiz)

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

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

跟王老师学MySQL:MySQL数据类型常见问题及解答

跟王老师学MySQL:MySQL数据类型常见问题及解答 主讲教师:王少华   QQ群号:483773664 学习内容 整数类型和浮点类型的异同 浮点数类型和定点数类型的异同 char和varchar类型的异同 时间和日期类型的异同 text和blob的异同 存储路径字符串的注意事项 mysql如何存储boolean类型 null的处理 在MySQL中创建表时,需要考虑为字段选择哪种数据类型是最合适的.选择了合适的数据类型,会提高数据库的效率. 一.整数类型和浮点类型 整数类型和浮点类型最大区别是

跟王老师学反射(四):Class类:从Class类中获取信息

跟王老师学反射(四)Class类:从Class类中获取信息 主讲教师:王少华   QQ群号:483773664 学习内容 获得class类中的信息 根据我们以前学过的一个Java类有以下几部组成,如下代码所示 一.访问Class对应的类所包含的构造方法 (一)public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回此Class对象所表示的类的指定public构造方法. parameterTypes参数是按

跟王老师学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:标度,小数点后的长度 注: 小数点不占长

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

跟王老师学MySQL:MySQL数据类型之字符类型 主讲教师:王少华   QQ群号:483773664 学习内容: 字符串类型的种类及其特点 char和varchar的异同 字符串类型是在数据库中存储字符串的数据类型. 字符串类型包括 CHAR. VARCHAR BLOB TEXT 一.char和varchar (一)定义语法 1 字符串类型 (M) 注: 字符串类型:char或varchar M:指定了该字符串最大长度 (二)二者不同之处 char类型长度是固定的,即在创建表时就指定了,其长度

跟王老师学MySQL:MySQL数据类型之日期与时间类型

跟王老师学MySQL:MySQL数据类型之日期与时间类型 主讲教师:王少华   QQ群号:483773664 学习内容 YEAR类型的特点及使用 TIME类型的特点及使用 DATE类型的特点及使用 DATETIME类型的特点及使用 TIMESTAMP类型的特点及使用 MySQL表示日期和时间的数据类型有以下几种: 1.YEAR类型 2.TIME类型 3.DATE类型 4.DATETIME类型 5.TIMESTAMP类型 一.Year类型 (一)简介 year使用一个字符串来表示年份 MySQL中

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

跟王老师学MySQL:MySQL数据类型之整数类型 主讲教师:王少华   QQ群号:483773664 MySQL的数据类型包括整数类型.浮点数类型.定点数类型.日期和时间类型.字符串类型和二进制数据类型. 学习目标 整型包括哪些类型以及它们的取值范围 以tinyint为例,讲解了定义整型的三个属性 一.简介 整数类型是数据库中最基本的数据类型. 标准SQL中支持INTEGER和SMALLINT这两类整数类型. MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT.MEDIUMIN