자바 반사 로 class 속성 값 을 가 져 오 는 실현 코드

3697 단어
원리: 자바 의 반 사 는 속성의 이름 을 얻 을 수 있 으 며, invoke 를 통 해 클래스 를 호출 하 는 방법 입 니 다.예 를 들 어 userName 이라는 속성 이 있 습 니 다. 이 종 류 는 getUserName 이라는 방법 을 썼 습 니 다. invoke 를 통 해 getUserName 을 호출 하 는 방법 입 니 다.
코드 는 다음 과 같다.
 
  
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class ParameterBase
{
    /**
     * Get Class field and value Map
     * @return
     */
    public Map getClassInfo()
    {
        Map  fieldsAndValues = new HashMap();
        Field [] fields = this.getClass().getDeclaredFields();
        for(int i=0; i< fields.length; i++)
        {
            Field f = fields[i];
            String value = getFieldValue(this ,f.getName()).toString();
            fieldsAndValues.put(f.getName(),value);
        }
      return fieldsAndValues;
    } 

   

    private  String getFieldValue(Object owner, String fieldName)
    {
        return invokeMethod(owner, fieldName,null).toString();
    }

   
    /**
     *
     * Field getField
     *
     * @param owner
     * @param fieldName
     * @param args , null
     * @return
     */
    private   Object invokeMethod(Object owner, String fieldName, Object[] args)
    {
        Class extends Object> ownerClass = owner.getClass();

        //fieldName -> FieldName 
        String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);

        Method method = null;
        try
        {
            method = ownerClass.getMethod("get" + methodName);
        }
        catch (SecurityException e)
        {
            //e.printStackTrace();
        }
        catch (NoSuchMethodException e)
        {
            // e.printStackTrace();
            return "";
        }

        //invoke getMethod
        try
        {
            return method.invoke(owner);
        }
        catch (Exception e)
        {
            return "";
        }
    }
}

클래스 User 를 ParameterBase 에 계승 하고 테스트 코드 를 쓰 십시오.
 
  
public class User extends ParameterBase
{
    String userName ;
    String passWorld;
    public String getUserName()
    {
        return userName;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    public String getPassWorld()
    {
        return passWorld;
    }
    public void setPassWorld(String passWorld)
    {
        this.passWorld = passWorld;
    }

    public static void main(String[] args)
    {
        User u = new  User();
        u.passWorld = "123";
        u.userName = "aaaaa";
        System.out.println(u.getClassInfo().toString());

    }
}

프로그램 출력
 
  
{passWorld=123, userName=aaaaa}

좋은 웹페이지 즐겨찾기