1. 程式人生 > 其它 >泛型、Junit

泛型、Junit

一、 泛型

1、泛型的好處

**1)編譯時,檢查新增元素的型別,提高了安全2)減少了類西較換的次數,提高效率

不使用泛型
Dog -> Object -> Dog //放入到ArrayList 會先轉成Object,在取出時,還需要轉換成Dog

**使用泛型
Dog -> Dog -> Dog//放入時,和取出時,不需要型別轉換,提高效率3)不再提示編譯警告

2、泛型介紹

泛(廣泛)型(型別)=> Integer,String,Dog(自定義型別)

1)泛型又稱引數化型別,是Jdk5.0出現的新特性,解決資料型別的安全性問題

2)在類宣告或例項化時只要指定好需要的具體的型別即可。
3) Java泛型可以保證如果程式在編譯時沒有發出警告,執行時就不會產生
ClassCastException異常。同時,程式碼更加簡潔、健壯
4)泛型的作用是:可以在類宣告時通過一個標識表示類中某個屬性的型別,或者是某個方
法的返回值的型別,或者是引數型別。[有點難]

可以在New一個物件的時候

3、泛型的語法

4、泛型語法和使用:

5、自定義泛型

1):自定義介面基本語法

interface 介面名<T,R..>{

}

細節:

2)、自定義泛型方法

基本語法:

修飾符<T,R..>返回型別方法名(引數列表){ };

示例:

import java.util.ArrayList;

@SuppressWarnings({"all"}) public class CustomMethodGeneric { public static void main(String[] args) { Car car
= new Car(); car.fly("寶馬", 100);//當呼叫方法時,傳入引數,編譯器,就會確定型別 System.out.println("======="); car.fly(300, 100.1);//當呼叫方法時,傳入引數,編譯器,就會確定型別 //測試 //T->String, R-> ArrayList Fish<String, ArrayList> fish = new Fish<>(); fish.hello(new ArrayList(), 11.3f); } }
//泛型方法,可以定義在普通類中, 也可以定義在泛型類中 class Car {//普通類 public void run() {//普通方法 } //說明 泛型方法 //1. <T,R> 就是泛型 //2. 是提供給 fly使用的 public <T, R> void fly(T t, R r) {//泛型方法 System.out.println(t.getClass());//String System.out.println(r.getClass());//Integer } } class Fish<T, R> {//泛型類 public void run() {//普通方法 } public<U,M> void eat(U u, M m) {//泛型方法 } //說明 //1. 下面hi方法不是泛型方法 //2. 是hi方法使用了類宣告的 泛型 public void hi(T t) { } //泛型方法,可以使用類宣告的泛型,也可以使用自己宣告泛型 public<K> void hello(R r, K k) { System.out.println(r.getClass());//ArrayList System.out.println(k.getClass());//Float } }

6、泛型的繼承和萬用字元:

1)、泛型不具備繼承性

2)、<?>:支援任意泛型型別

3)、<? extends A>::支援A類以及A類的子類,規定了泛型的上限
4)、<? super A>::支援A類以及A類的父類,不限於直接父類,規定了泛型的下限

二、Junit

基本介紹:

1).JUnit是一個Java語言的單元測試框架
2).多數Java的開發環境都已經集成了JUnit作為單元測試的工具

簡單用例:

import org.junit.jupiter.api.Test;

import java.util.*;

public class Generics {
    public static void main(String[] args) {

    }
    @Test
    public void testList(){
        DAO<User> dao = new DAO<>();
        dao.save("1",new User(1,1,"zzz"));
        dao.save("2",new User(2,10,"xxx"));
        dao.save("3",new User(3,20,"ccc"));

        System.out.println(dao.list());
        System.out.println(dao.get("2"));
        dao.update("2", new User(4, 40, "vvv"));
        dao.delect("3");
        System.out.println(dao.list());

    }


}
class DAO<T>{
   private Map<String,T> map = new HashMap<>();



    public void save(String id,T entity){
        map.put(id, entity);
    }
    public T get(String id){
        T t = map.get(id);
        return t;
    }
    public void update(String id,T entity){
        map.put(id, entity);
    }

    public List<T> list(){
        ArrayList<T> list = new ArrayList<>();
        Set<String> strings = map.keySet();
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            list.add(map.get(next));
        }
        return list;
    }
    public void delect(String id){
        map.remove(id);
    }
}
class User{
    private int id;
    private int age;
    private String name;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }
}