通過反射認識泛型的本質
通過 Class 和 Method 來認識泛型的本質,在編譯階段驗證是否有錯誤。
如果我們繞過編譯就繞過泛型。
來看一個demo
- package practice.Reflect;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- /**
- * @Author: 言曌
- * @Date: 2017/11/17
- * @Time: 上午10:27
- */
- public class MethodDemo2 {
- public static void main(String args[]) {
- //什麼型別都可以新增
- ArrayList list = new ArrayList();
- list.add("hello");
- list.add(2017);
- list.add(true);
- System.out.println(list);
- //只能新增String型別的元素
- ArrayList<String> list1 = new ArrayList<String>();
- list1.add("hello");
- //list1.add(2017);//錯誤
- Class c1 = list.getClass();
- Class c2 = list1.getClass();
- System.out.println(c1 == c2);//true
- //反射的操作都是編譯之後的操作
- /**
- * c1==c2結果返回true說明編譯之後集合的泛型是去泛型化的
- * Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效
- * 繞過編譯就無效了
- * 驗證:我們可以通過方法的反射來操作,繞過編譯
- */
- try {
- Method m = c1.getMethod("add",Object.class);
- m.invoke(list1,100);//繞過編譯就繞過了泛型
- System.out.println(list1.size());
- System.out.println(list1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- //最終我們確定,Class,Method,Field,反射操作 都是繞過編譯的,都是在執行時刻來執行的
- }
- }
最終我們得出結論,Class,Method,Field,反射操作 都是繞過編譯的,都是在執行時刻來執行的 。
相關文章
- 反射-通過反射越過泛型檢查反射泛型
- 認識Java泛型Java泛型
- 再次認識java泛型Java泛型
- Java反射—方法的反射、深入瞭解泛型Java反射泛型
- Java 容器和泛型(1)認識容器Java泛型
- 一句話,講清楚java泛型的本質(非型別擦除)Java泛型型別
- C# 透過反射(Reflection)呼叫不同名泛型方法C#反射泛型
- 【Java反射】Java 泛型基礎Java反射泛型
- 【譯】9. Java反射——泛型Java反射泛型
- 如何用反射呼叫泛型類的方法反射泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 集合框架-通過Object轉型問題引入泛型框架Object泛型
- Java反射給泛型集合賦值Java反射泛型賦值
- DataTable轉換list泛型集合(反射)泛型反射
- 菜鳥學Java(二十二)——重新認識泛型Java泛型
- 從本質認識JavaScript的原型繼承和類繼承JavaScript原型繼承
- Go中泛型和反射比較指南Go泛型反射
- Gson通過藉助TypeToken獲取泛型引數的型別的方法泛型型別
- C++ 泛型程式設計基礎:模板通識C++泛型程式設計
- Java泛型知識Java泛型
- 通過一個例項重新認識引用型別,值型別,陣列,堆疊,ref型別陣列
- Java進階 | 泛型機制與反射原理Java泛型反射
- JDBC泛型類反射封裝結果集JDBC泛型反射封裝
- 8.集合、泛型、列舉、註解、反射泛型反射
- 007 通過連結串列學Rust之支援泛型Rust泛型
- 【Android】 認識反射機制(Reflection)Android反射
- Go Internals: Go 反射 vs Java 泛型 vs cpp 模板Go反射Java泛型
- 認知篇:CQRS架構模式的本質架構模式
- 反射-通過反射執行配置檔案內容反射
- 關於Java中泛型、反射和註解的掃盲篇Java泛型反射
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 反射-通過反射獲取私有構造方法並使用反射構造方法
- 反射-通過反射獲取成員變數並使用反射變數
- corejava基礎知識(3)-泛型Java泛型
- C# 通過反射建立例項C#反射
- 通過實現仿照FeignClient框架原理的示例來看清FeignClient的本質client框架
- 泛型類、泛型方法及泛型應用泛型
- brandwatch:通過使用者的討論話題認識Twitter