java使用反射實現swap 值互換

/**
 * 主方法定義了兩個Integer變量,通過調用swap方法後,使這兩個變量交換數據
 */
public class swapImpl {
    public static void main(String[] args) throws Exception {
        Integer a = 1;
        Integer b = 2;
        System.err.println(a + "---" + b);
        swap(a, b);
        System.err.println(a + "---" + b);
    }

    public static void swap(Integer num1, Integer num2) throws Exception {
        Field field = num1.getClass().getDeclaredField("value");//獲取類的value
        field.setAccessible(true);//修改訪問權限
        Object tmp = field.get(num1);//獲取指針所指向的對象的值,而不是獲取引用值
        field.set(num1, num2);//將num1的引用所指向的a的值設置爲,num2所指向的b的值
        field.set(num2, tmp);//將tmp的值設置給,num2所指向的b的值
    }

}

num1.getClass拿到參數對應的類

在通過getDeclaredField("value")拿到該類的value屬性

field.get(num1)獲取這個值的引用所指向的對象的具體的值,也就是num1指向的a的值1

field.set是將num1的值設置爲num2的值

然後再講tmp的值設置爲num1的值

這樣就實現了值的互換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章