Java的泛型有坑

Java的泛型有坑

public class Main {
    public static void main(String[] args) throws Exception {
        Main.test_no();
        Main2.test_ok();
    }
    static void test_no() {
        Result<Integer> result_Integer = new Result<Integer>();
        result_Integer.setData(123);
        Result<String> result_String = change(result_Integer);
        String list = result_String.getData();// 反編譯是在這裏強制轉換爲String了,這裏拋異常
    }
    static Result change(Object object) {
        Result result = new Result<String>();
        result.setData(object);
        return result;
    }
}
public class Result<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}

反編譯的結果:
這裏寫圖片描述

全部改爲泛型即可在編譯期發現該錯誤:

class Main2 {
    static void test_ok() throws Exception {
        Result<Integer> result_Integer = new Result<Integer>();
        result_Integer.setData(123);
        Result<String> result_String = change(result_Integer);
        String list = result_String.getData();
    }
    static <T> Result<T> change(T object) {
        Result<T> result = new Result<T>();
        result.setData(object);
        return result;
    }
}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章