使用java反射操作類的建構函式,成員變數和成員方法__函數

來源:互聯網
上載者:User

 

在java.lang.reflect包中有三個類Field,Method,Constructor.分別描述域,方法,構造器。參考API,關於這三個類的說明。

 

在運行時使用反射分析對象,如果訪問的是私人域或是私人方法,私人建構函式,會拋出IllegalAccessException.因為反射機制的預設行為受限於java的存取控制,然而,如果一個java程式沒有受到安全管理器的控制,就可以覆蓋存取控制。為了達到這個目的,需要調用Field,Method,Constructor對象的setAccessible方法,setAccessible方法是AccessibleObject類的一個方法,是Field,Method,Constructor類的公用超類。

setAccessible(true);

 

不要過多地使用反射:破壞類封裝;效率偏低;編譯器不容易協助發現錯誤,在運行時才會被發現。

我使用反射,是為了寫單元測試代碼,對運行對象的分析,改變對象的私人域等,達到測試需要的覆蓋率。

以下提供代碼案例:

測試類別: public   class  RunBing  ... {
    private String name;
    private int age;
    public String sex;

    public RunBing() ...{

    }

    private RunBing(String name) ...{
        this.name = name;
    }

    public void setName(String name) ...{
        this.name = name;
    }

    public void setAge(int age) ...{
        this.age = age;
    }

    public String getName() ...{
        return name;
    }

    public int getAge() ...{
        return age;
    }

    public String run() ...{
        return "run method";
    }

    private String add() ...{
        return "add method";
    }
}

 

 

 
import  java.lang.reflect.Field;
import  java.lang.reflect.Method;
import  java.lang.reflect.Constructor;


public   class  ReflectHelp  ... {

        /** *//**
         * 通過構造器取得執行個體
         * @param className 類的全限定名
         * @param intArgsClass 建構函式的參數類型
         * @param intArgs 建構函式的參數值
         * 
         * @return Object 
         */
        public static Object getObjectByConstructor(String className,Class[] intArgsClass,Object[] intArgs)...{

        Object returnObj= null;
        try ...{
            Class classType = Class.forName(className);
            Constructor constructor = classType.getDeclaredConstructor(intArgsClass); //找到指定的構造方法
            constructor.setAccessible(true);//設定安全檢查,訪問私人建構函式必須
            returnObj = constructor.newInstance(intArgs);
        } catch (NoSuchMethodException ex) ...{
            ex.printStackTrace();
       &

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.