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的值

这样就实现了值的互换

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