zoukankan      html  css  js  c++  java
  • 利用反射技术修改类中的字段(成员变量的反射)



    题目:利用反射技术修改类中的字段及成员变量的反射

    作者:Vashon

    一、首先定义一个类如下:

    class ReflectPoint {
    	private int x; //私有的
    	public int y;  //公用的
    	
    	public String str1="ball";
    	public String str2="basketball";
    	public String str3="yangwenxue";
    	
    	public ReflectPoint(){}
    	
    	public ReflectPoint(int x,int y){
    		this.x=x;
    		this.y=y;
    	}
    	public String toString(){
    		return "替换后为:
    "+str1+"	"+str2+"	"+str3;
    	}
    }

    二、对以上的操作实现如下:

    package com.ywx.gaoxin;
    
    import java.lang.reflect.Field;
    
    /**
     * 1.成员变量的反射
     * 2.利用反射技术修改某个类中属性的值(类中的权限修饰符必须是public才可以)
     * 修改:将所有String类型的字段中的字符"b"修改为"a"
     * @author yangwenxue
     *
     */
    public class ReflectTest {
    	public static void main(String args[]) throws Exception{
    		
    		ReflectPoint re=new ReflectPoint(3,5);
    		Field fieldY= re.getClass().getField("y");
    		System.out.println("fieldY="+fieldY.get(re));
    		
    		//因为ReflectPoint类中的x是私有的
    		Field fieldX= re.getClass().getDeclaredField("x");
    		fieldX.setAccessible(true);//设为可以访问
    		System.out.println("fieldX="+fieldX.get(re));
    		//修改String类型的字段
    		try {
    			changeStringvalue(re);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		System.out.println(re);
    	}
    	/**
    	 * 将为String类型的字段中含有"b"的替换为"a"
    	 * @param obj
    	 * @throws Exception
    	 */
    	private static void changeStringvalue(Object obj) throws Exception{
    		Field[] fields= obj.getClass().getFields();
    		for(Field field : fields){
    			if(field.getType().equals(String.class)){//判断字段是否为String类型
    				String oldValue=(String) field.get(obj);
    				String newValue=oldValue.replace('b', 'a');
    				field.set(obj, newValue);
    			}
    		}
    	}
    }



    控制台输出为:

    fieldY=5
    fieldX=3
    替换后为:
    aall aasketaall yangwenxue


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    Stay Hungry, Stay Foolish, Walking in Life
  • 相关阅读:
    poj 1466 Girls and Boys (最大独立集)
    hdu 3667 Transportation (拆边 ,最小费用流)
    poj 3487 The Stable Marriage Problem (稳定婚姻 GaleShapley算法 )
    ZOJ Problem Set 1239 (最小点覆盖 )
    poj 2060 Taxi Cab Scheme (最小路径覆盖)
    poj 2226 Muddy Fields (最小点覆盖)
    hdu 1281 棋盘游戏 (二分图)
    hdu 3666 THE MATRIX PROBLEM (差分约束)
    poj 1325 Machine Schedule (最小点覆盖)
    ORACLE导入导出
  • 原文地址:https://www.cnblogs.com/ywx-vashon/p/4895761.html
Copyright © 2011-2022 走看看