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;
}
}