Skip to content

S07-02 泛型-JUnit

[TOC]

第 15 章 泛型与 JUnit

泛型的继承和通配符

核心代码示例

java
import java.util.ArrayList;
import java.util.List;

/**
 * 泛型的继承和通配符
 * @author 韩顺平
 * @version 1.0
 */
public class GenericExtends {
    public static void main(String[] args) {
        Object o = new String("xx");
        // 泛型没有继承性
        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<AA> list3 = new ArrayList<>();
        List<BB> list4 = new ArrayList<>();
        List<CC> list5 = new ArrayList<>();

        // 1. List<?> c: 可以接受任意的泛型类型
        printCollection1(list1);
        printCollection1(list2);
        printCollection1(list3);
        printCollection1(list4);
        printCollection1(list5);

        // 2. List<? extends AA> c: 表示上限,可以接受AA 或者AA 子类
        // printCollection2(list1);//×
        // printCollection2(list2);//×
        printCollection2(list3);//√
        printCollection2(list4);//√
        printCollection2(list5);//√

        // 3. List<? super AA> c: 支持AA 类以及AA 类的父类,不限于直接父类
        printCollection3(list1);//√
        // printCollection3(list2);//×
        printCollection3(list3);//√
        // printCollection3(list4);//×
        // printCollection3(list5);//×
    }

    // 说明: List<?> 表示任意的泛型类型都可以接受
    public static void printCollection1(List<?> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }

    // ? extends AA 表示上限,可以接受AA 或者AA 子类
    public static void printCollection2(List<? extends AA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }

    // ? super 子类类名AA:支持AA 类以及AA 类的父类,不限于直接父类,规定了泛型的下限
    public static void printCollection3(List<? super AA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }
}

class AA {}
class BB extends AA {}
class CC extends BB {}

本章作业

编程题 Homework01.java(10min)

  1. 定义泛型类 DAO<T>,包含 Map 成员变量(键为 String 类型,值为 T 类型)
  2. 实现以下方法:
    • public void save(String id, T entity): 保存 T 类型对象到 Map
    • public T get(String id): 从 Map 中获取 id 对应的对象
    • public void update(String id, T entity): 替换 Mapkeyid 的内容
    • public List<T> list(): 返回 Map 中所有 T 对象
    • public void delete(String id): 删除指定 id 的对象
  3. 定义 User 类:包含私有成员变量 id(int)、age(int)、name(String)
  4. 创建 DAO 类对象,调用上述方法操作 User 对象,使用 JUnit 单元测试

JUnit

为什么需要 JUnit

  1. 传统方式需在 main 方法中编写测试代码
  2. 多个功能测试需来回注销,切换麻烦
  3. 需直接运行单个方法并获取测试信息

基本介绍

  1. JUnit 是 Java 语言的单元测试框架
  2. 多数 Java 开发环境已集成 JUnit

使用示例(JUnit 5)

java
package com.hspedu.junit_;

import org.junit.jupiter.api.Test;

/**
 * @author 韩顺平
 * @version 1.0
 */
public class JUnit_ {
    // 传统方式测试
    public static void main(String[] args) {
        new JUnit_().m1();
        new JUnit_().m2();
    }

    @Test
    public void m1() {
        System.out.println("m1 方法被调用");
    }

    @Test
    public void m2() {
        System.out.println("m2 方法被调用");
    }

    @Test
    public void m3() {
        System.out.println("m3 方法被调用");
    }
}