1. 程式人生 > >Java泛型擦除(泛型反射)

Java泛型擦除(泛型反射)

package com.sanmao10;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class test_fanxing {
    /**
     * * ArrayList<Integer>的一個物件,在這個集合中新增一個字串資料,如何實現呢?
     * 泛型只在編譯期有效,在執行期會被擦除掉*/
    public static void main(String[] args) throws Exception{
        ArrayList<Integer> list=new
ArrayList<>(); list.add(123); list.add(321); //list.add( "www"); 將會報錯 為了解決這個問題,我們對其add方法進行反射,講字串新增進去 //因為不在編譯期 所以泛型無效 Class clazz=Class.forName("java.util.ArrayList"); Method m=clazz.getMethod("add",Object.class); //API add(E e) 引數Object m.invoke(list,"sanmao"
); System.out.println(list); //[123, 321, sanmao] 成功反射進來字串 } }

相關推薦

Java反射

package com.sanmao10; import java.lang.reflect.Method; import java.util.ArrayList; public class test_fanxing { /** * * A

基礎知識-Java簡潔明瞭

0.概念    Java 泛型的引數只可以代表類,不能代表個別物件。由於 Java 泛型的型別引數之實際型別在編譯時會被消除,所以無法在執行時得知其型別引數的型別。Java 編譯器在編譯泛型時會自動加入型別轉換的編碼,故執行速度不會因為使用泛型而加快。---百度百科    泛

type erasure和橋接方法bridge method

無界萬用字元會被編譯為Object,有邊界的萬用字元會被編譯為相應的邊界   正常類的繼承是不會產生這個橋接方法的。 橋接方法,一個類、介面繼承或實現某個類、介面時,會在子類中出現一個橋接方法。 這個方法不能被子類呼叫,即mn不能呼叫到這個橋接方法,但是n可以呼

13. Java基礎之類信息RTTI和反射

getmethod 類型 void import 得到 攜程 表達 返回 現在 一. 背景 並不是所有的Class都能在編譯時明確,因此在某些情況下需要在運行時再發現和確定類型信息(比如:基於構建編程,),這就是RTTI(Runtime Type Info

Java 之路 (十六) -- 萬用字元、型別的限制

7. 萬用字元 萬用字元,即 “?”,用來表示未知型別。 萬用字元可用作各種情況:作為引數,欄位或區域性變數的型別;有時也作為返回型別;萬用字元從不用作泛型方法呼叫、泛型類例項建立或超型別的型別引數。 7.1 上限有界的萬用字元 使用上限萬用字元來放

一句話,講清楚java的本質非類

我想 resource return 簡單的 構造 都是 extend exce 反編譯 背景 昨天,在逛論壇時遇到個這麽個問題,上代碼: public class GenericTest { //方法一 public static <T extend

一文講解Java的本質非類

ast exception 時也 -o mage 有效 ron 我們 can 背景 昨天,在逛論壇時遇到個這麽個問題,上代碼: public class GenericTest { //方法一 public static <T extends Com

Java

類型信息 png ive over tool 創建 edit sid 註意點 Java泛型擦除: 什麽是泛型擦除? 首先了解一下什麽是泛型?我個人的理解:因為集合中能夠存儲隨意類型的對象。可是集合中最先存儲的對象類型一旦確定後,就不能在存儲其它類型的

深入--java的繼承和實現、

部分 end father 沒有 接口 子類 set int nal 泛型實現類: package generic; /** * 泛型父類:子類為“富二代”:子類的泛型要比父類多 * 1,保留父類的泛型-->子類為泛型類

java 的內部原理:類除以及類帶來的問題

st2 往裏面 避免 我們 lar 屬於 util get 驚奇 一、Java泛型的實現方法:類型擦除 前面已經說了,Java的泛型是偽泛型。為什麽說Java的泛型是偽泛型呢?因為,在編譯期間,所有的泛型信息都會被擦除掉。正確理解泛型概念的首要前提是理解類型擦出(type

關於的知識來源於csdn地址:https://blog.csdn.net/briblue/article/details/76736356

lock array tle 來源 應該 rank 不想 專業 相關 泛型,一個孤獨的守門者。 大家可能會有疑問,我為什麽叫做泛型是一個守門者。這其實是我個人的看法而已,我的意思是說泛型沒有其看起來那麽深不可測,它並不神秘與神奇。泛型是 Java 中一個很小巧的概念,但同時

揭開Java 神秘面紗

sys 通過反射 監視 too super mage collect boolean 理解 泛型,一個孤獨的守門者。 大家可能會有疑問,我為什麽叫做泛型是一個守門者。這其實是我個人的看法而已,我的意思是說泛型沒有其看起來那麽深不可測,它並不神秘與神奇。泛型是 Java 中一

Java筆記】

要求:定義ArrayList<String>集合,如何實現向集合中新增Integer型別的值? 實現這個要求前,我們可以先了解偽泛型的概念,即編譯後的Class檔案中其實是沒有泛型約束的,請看程式碼: public class Test { public void doTwo(L

#乾貨分享:Java和執行時資訊獲取

Java 的泛型擦除 程式設計師界有句流行的話,叫 talk is cheap, show me the code,所以話不多說,看程式碼。 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!我整理了一份適合18年學習的java

java】---型別與多的衝突和解決方法

型別擦除與多型的衝突和解決方法 現在有這樣一個泛型類: [java] view plain copy print ? class Pair<T>&

Java 使用與

Java 泛型 泛型(generics)是Java 1.5 中引入的特性。泛型的引入使得程式碼的靈活性和複用性得以增強,對於容器類的作用更為明顯。 泛型可以加在類、介面、方法之上。如下所示: public class Generic1<T> {

java基礎總結 --- 、邊界、萬用字元、

* 擦除的問題 * 為什麼要擦除: 1.5版本才出現泛型 為了相容之前地程式碼 * 它使得泛化的客戶端可以用非泛化的類庫來使用。 * 以及不破壞現有類庫的情況下,將泛型融入java語言。 * 擦除使得現有的非泛型客戶端程式碼能夠在不改變的情況繼續使用,直至客戶端準

類載入器、反射反射的應用例項和配置檔案

類載入器 1.1類的載入 當程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會通過載入,連線,初始化三步來實現對這個類進行初始化。   1.1.1載入 指將class檔案讀入記憶體,併為之建立一個Class物件。 任何類被使用時系統都會建立一個Class物件(位元組碼檔案物件,建

java

1:概念 泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數,在用到的時候再指定為具體的型別。 與其他語言不同,java的泛型被稱為偽泛型。它只在程式的原始碼中存在,在編譯後的位元組碼檔案中,泛型被轉化 成了原始型別(Raw Type)。因此對於執行期的Ja

java基礎(28)--與型別與繼承

【泛型與型別擦除】 泛型是JDK 1.5的一項新特性,它的本質是引數化型別(Parameterized Type)的應用,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面和泛型方法。 泛