最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例

 更新時(shí)間:2023年03月09日 14:53:24   作者:ZWZhangYu  
這篇文章主要介紹了怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、無參構(gòu)造函數(shù)

/**
 *  反射內(nèi)部類
 * @author zhangyu
 * @date 2022/1/8
*/
public class OuterClass {

    public void process() {
        System.out.println("外部類方法...");
    }

    class InnerClass {
        public void process() {
            System.out.println("內(nèi)部類方法...");
        }
    }
}

【1】獲取內(nèi)部類對(duì)象需要依賴外部類的對(duì)象

【2】通過Class獲取內(nèi)部類可以通過倆種方式

  • 第一種:Class.forName("package.name.OuterClass I n n e r C l a s s " ) 通 過 InnerClass") 通過 InnerClass")通過符號(hào)定位到內(nèi)部類
  • 第二種:通過外部類Class使用OuterClass.class.getDeclaredClasses()獲取外部類下可用的內(nèi)部類對(duì)象

【3】實(shí)例化類需要構(gòu)造器,反射調(diào)用構(gòu)造器需要設(shè)置可訪問constructor.setAccessible(true);

    @Test
    public  void test5() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException, ClassNotFoundException {
        //需要依賴外部類對(duì)象實(shí)例化內(nèi)部類
        Class outerClass = Class.forName("reflection.demo.OuterClass");
        Object outerObject = outerClass.newInstance();
        //如果知道外部類下內(nèi)部類數(shù)量,那么通過下面方式即可
        Class<?> innerClass = OuterClass.class.getDeclaredClasses()[0];
        //如果知道內(nèi)部類全限定名,可以通過下面的方式
        //Class<?> innerClass = Class.forName("full.package.name.OuterClass$InnerClass")
        //獲取默認(rèn)構(gòu)造器
        Constructor<?> constructor = innerClass.getDeclaredConstructors()[0];
        //也可以通過下面的方式獲取構(gòu)造器
        //Constructor<?> constructor = innerClass.getDeclaredConstructor(OuterClass.class);
        //默認(rèn)構(gòu)造器私有的,需要設(shè)置可訪問
        constructor.setAccessible(true);
        //通過構(gòu)造器和父類Class創(chuàng)建內(nèi)部類實(shí)例
        Object innerObject = constructor.newInstance(outerObject);
        Method innerClassDeclaredMethod = innerClass.getDeclaredMethod("process");
        innerClassDeclaredMethod.setAccessible(true);
        innerClassDeclaredMethod.invoke(innerObject);
    }

二、有參構(gòu)造函數(shù)

上面描述的是不帶參數(shù)的構(gòu)造函數(shù),下面描述下帶參數(shù)的構(gòu)造函數(shù)

/**
 *  反射內(nèi)部類
 * @author zhangyu
 * @date 2022/1/8
*/
public class OuterClass {

    private  String name;

    public OuterClass(String name) {
        this.name = name;
    }

    public void process() {
        System.out.println("外部類方法...");
    }

    class InnerClass {
        private  String name;

        public InnerClass(String name) {
            this.name = name;
        }

        public void process() {
            System.out.println(name+"----內(nèi)部類方法...");
        }
    }
}
    @Test
    public  void test5() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException, ClassNotFoundException {
        //需要依賴外部類對(duì)象實(shí)例化內(nèi)部類
        Class outerClass = Class.forName("reflection.demo.OuterClass");
        Constructor declaredConstructor = outerClass.getDeclaredConstructor(String.class);
        declaredConstructor.setAccessible(true);
        //獲取外部類實(shí)例以及設(shè)置構(gòu)造函數(shù)值
        Object outerObject = declaredConstructor.newInstance("outerClass");

        //如果知道外部類下內(nèi)部類數(shù)量,那么通過下面方式即可
        Class<?> innerClass = OuterClass.class.getDeclaredClasses()[0];
        //如果知道內(nèi)部類全限定名,可以通過下面的方式
        //Class<?> innerClass = Class.forName("full.package.name.OuterClass$InnerClass")
        //獲取默認(rèn)構(gòu)造器
        Constructor<?> constructor = innerClass.getDeclaredConstructors()[0];
        //也可以通過下面的方式獲取構(gòu)造器
        //Constructor<?> constructor = innerClass.getDeclaredConstructor(OuterClass.class);
        //默認(rèn)構(gòu)造器私有的,需要設(shè)置可訪問
        constructor.setAccessible(true);
        //通過構(gòu)造器和父類Class創(chuàng)建內(nèi)部類實(shí)例.設(shè)置構(gòu)造函數(shù)值
        Object innerObject = constructor.newInstance(outerObject,"innerClass");
        Method innerClassDeclaredMethod = innerClass.getDeclaredMethod("process");
        innerClassDeclaredMethod.setAccessible(true);
        innerClassDeclaredMethod.invoke(innerObject);
    }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中Bigdecimal類的toString()方法和toPlainString()方法區(qū)別

    Java中Bigdecimal類的toString()方法和toPlainString()方法區(qū)別

    BigDecimal類有多個(gè)方法可以將其轉(zhuǎn)換為字符串,其中包括toString()和toPlainString(),本文主要介紹了Java中Bigdecimal類的toString()方法和toPlainString()方法區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 詳解SpringBoot時(shí)間參數(shù)處理完整解決方案

    詳解SpringBoot時(shí)間參數(shù)處理完整解決方案

    這篇文章主要介紹了詳解SpringBoot時(shí)間參數(shù)處理完整解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot Shiro在Web應(yīng)用中的作用詳解

    Spring Boot Shiro在Web應(yīng)用中的作用詳解

    這篇文章主要為大家介紹了Spring Boot Shiro在Web應(yīng)用中的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 淺談Spring單例Bean與單例模式的區(qū)別

    淺談Spring單例Bean與單例模式的區(qū)別

    這篇文章主要介紹了淺談Spring單例Bean與單例模式的區(qū)別,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Java多線程之同步工具類Exchanger

    Java多線程之同步工具類Exchanger

    這篇文章主要介紹了Java多線程之同步工具類Exchanger,Exchanger 是一個(gè)用于線程間協(xié)作的工具類,Exchanger用于進(jìn)行線程間的數(shù)據(jù)交換,它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù),下面來看看具體內(nèi)容吧
    2021-10-10
  • SpringMVC接收頁面表單參數(shù)

    SpringMVC接收頁面表單參數(shù)

    本篇文章主要介紹了SpringMVC接收頁面表單參數(shù)的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-05-05
  • SpringBoot實(shí)現(xiàn)發(fā)送郵件功能

    SpringBoot實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要介紹了SpringBoot 發(fā)送郵件功能實(shí)現(xiàn),本文以163郵箱為例通過這個(gè)小案例給大家介紹,需要的朋友可以參考下
    2019-12-12
  • 詳解Spring Boot配置排序依賴技巧

    詳解Spring Boot配置排序依賴技巧

    本篇文章主要介紹了Spring Boot配置排序依賴技巧,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌

    Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • PowerJob的DatabaseMonitorAspect源碼流程

    PowerJob的DatabaseMonitorAspect源碼流程

    這篇文章主要為大家介紹了PowerJob的DatabaseMonitorAspect源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評(píng)論

二手房| 右玉县| 松潘县| 高陵县| 祥云县| 托里县| 军事| 诸暨市| 芦山县| 米泉市| 万山特区| 潍坊市| 广宗县| 黎城县| 台前县| 衡南县| 衡南县| 巩留县| 南京市| 鄂托克旗| 黄山市| 合作市| 滨州市| 开远市| 漠河县| 镇康县| 哈密市| 诸城市| 福鼎市| 札达县| 正定县| 嵊州市| 大安市| 阳高县| 杭州市| 商水县| 阿合奇县| 桦甸市| 安徽省| 当雄县| 邹平县|