1. 程式人生 > >java 反射之越過泛型檢查

java 反射之越過泛型檢查

反射之前,我們知道在集合類中一旦指定了泛型的型別,則只能在該集合中用該型別。但是我們可以利用反射機制來越過泛型檢查。比如說利用反射機制獲取ArrayList中的add()方法,再呼叫add方法時,就會越過泛型檢查,只是由於泛型檢查是在編譯時期進行的,也就是說編譯後的add()方法其實和沒有指定泛型的add()方法是一致的,都是不能進行泛型檢查的。所以通過反射獲取ArrayList的Class檔案物件中的add()方法,在呼叫該add()方法時是不用泛型檢查的。如下所示:

測試主類

package cn.edu.tju.versace;

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

import cn.edu.tju.reflect.Student;

/**
 * 反射越過泛型檢查
 * @author feige
 */
public class ReflectDemo {

    public static void main(String[] args) throws Exception {
     ArrayList<Integer> arrayList=new ArrayList<Integer>();//指定泛型為Integer
     Class c=arrayList.getClass();//獲取Class檔案物件
     Method addMethod=c.getDeclaredMethod("add",Object.class);//獲取Class檔案物件中的add()方法
     Student  s=new Student("arui",25);
     addMethod.invoke(arrayList, "afei");//越過泛型檢查,新增String型別
     addMethod.invoke(arrayList, s);//越過泛型檢查,新增Student型別
     System.out.println(arrayList);//結果為:[afei, Student [name=arui, age=25]]
    }

}
Student類:
package cn.edu.tju.reflect;

public class Student {
 private String name;
 public int age;
 
public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}

private Student() {
    super();
}

private void showName(String name) {
    this.name=name;
    System.out.println("name is:"+name);
}

public int showAge() {
    return age;
}

@Override
public String toString() {
    return "Student [name=" + name + ", age=" + age + "]";
}

}

相關推薦

java 反射越過檢查

反射之前,我們知道在集合類中一旦指定了泛型的型別,則只能在該集合中用該型別。但是我們可以利用反射機制來越過泛型檢查。比如說利用反射機制獲取ArrayList中的add()方法,再呼叫add方法時,就會

java 反射獲取對象的所有字段與對應的值(包括父類的)

date lse 代碼 out lda ble alt http info 上代碼: public static void main(String[] args) throws IntrospectionException { SysUser obj =

java反射系列七 --- 通過反射越過檢查

1.定義一個測試類public class relfact { public static void main(String[] args){ List<String> list = new ArrayList<>();

javaSE (四十一)反射的概念、通過反射越過檢查

作為javaSE的最後一篇,反射更多的是一種程式設計理念或者說優化,對前面的java多型的一種優化,簡單但是需要理解一下 這篇文章寫的很好: 大白話說Java反射:入門、使用、原理 1、反射的概念: 反射是相對於正射來說的,正射是先通過構造方法建立類的物件,然後使用

反射_通過反射越過檢查

package cn.itcast.test; import java.lang.reflect.Constructor; import java.lang.reflect.Method; impo

反射跳過檢查

ger add () star sys cep object bsp out @Testpublic void method() throws NoSuchMethodException, InvocationTargetException, IllegalAccessE

Java進階 四 Java反射TypeToken解決執行時型別擦除問題

在開發時,遇到了下面這條語句,不懂,然習之。   private List<MyZhuiHaoDetailModel> listLottery = new ArrayList<MyZhuiHaoDetailModel&

Java進階(四)Java反射TypeToken解決執行時型別擦除問題

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興! 在開發時,遇到了下面這條語句,不懂,然習之。 private List<MyZhuiHaoDetailModel> listLottery = new ArrayList&l

通過java反射技術獲取的真實型別並對其例項化

public DaoBaseInterfaceImpl() { // 反射得到T的真實型別 ParameterizedType ptype = (ParameterizedType) thi

java通過反射獲取私有的構造方法,及反射擦除數據類約束

code for循環 getmethod 不能 添加 class win flag ring /* * 反射獲取私有的構造方法運行 * 不推薦,破壞了程序的安全性,封裝性 * 暴力私有 */ public class ReflectDemo4 {

小白的JAVA路——講解(三)

從本小結開始,我們就要開始理解泛型的原理咯。在學習之前,我們先要了解知識,以便幫助我們更好的理解泛型。 泛型程式碼和虛擬機器:虛擬機器是沒有泛型物件的,所有物件都是屬於普通類的,因此虛擬機器在解析泛型程式碼時,會產生一個相應的原始型別。 原始型別:  每當我們定義一個泛型

小白的JAVA路——講解(四)

由於我學習java的時候跳過了UI開發的知識學習,因此對於元件Compoent類會有點陌生,不過這並不影響我們講解泛型機制的原理,現在,讓我們來繼續學習泛型機制。 4.1 呼叫遺留程式碼 java中的遺留程式碼是指編寫於JAVA SE5.0之前的程式碼,一直遺留到現在。那

重識Java夯實

引言 本文概要: 泛型的基本使用 泛型類 泛型介面 泛型函式 泛型的進階使用 型別繫結 萬用字元 泛型的基本使用 本節概要: 泛型類,介面,函式的定義 泛型的優點: 不用強制轉換 如果傳

java基礎增強(反射, 註解,日誌)

泛型 作用:異常提前到編譯期 // 執行時期異常 @Test public void testGeneric() throws Exception { // 集合的宣告 List list = new

Java進階路~

一 泛型標識著集合中儲存的元素<泛型(型別)> eg: ArrayList<String>好處:1.操作資料更加安全(規範集合中能儲存的資料)2.可以避免向下轉型(強轉型別)的麻煩3.將執行時的出錯 轉到編譯時報錯二 正向遍歷與逆向遍歷public s

從頭認識java-13.5 利用構建復雜模型

引用 ucid http lee private 這一 數據 pack ora 這一章節我們來展示一下如何利用泛型構建復雜模型?1.元組列表我們之前已經說過元組是一個復雜的模型,能夠返回多對象。package com.ray.ch11; import java.uti

java反射】Class類的相關操作演練

div gif display 演練 esp arguments 接口 hid col 【一】獲取範型接口的實現類的範型類型 (1)範型接口 package org.springframework.context; import java.util.EventList

基於java容器註解---基於的自動裝配

ges ger 配置 技術分享 config -1 blog clas bean 上面利用@Configuration和@Bean配置bean,中間利用@Autowired,指定s1和s2分別指向哪個實現類,下面利用@Autowired,指定s中只有Integer實現類

Java語言中的

數據 返回值 result public 部分 集合 操作 ava imp 一、泛型的概念及作用   1、泛型的概念     Java中的泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。     這種參數類型可以用在類

day15 java語言中的-------

day15 java 語言中的-----泛型day15 java語言中的-------泛型一、泛型概述: “泛型”這個概念大家可能有些陌生,其實不然,泛型直面意思你可以理解為多種數據類型、可變的數據類型、不同需求時的數據類型等等。在開發中,泛型的使用時很常見的,同時包含泛型類和泛型方法兩種。掌握好他們之