JAVA 반사 시리즈의 Field,java.lang.reflect.Field 는 획득 방법을 사용합니다.

5548 단어
우선 Field 클래스는 주로 클래스의 속성을 가져오고 조작하는 데 사용됩니다!
1. 어떻게 반사로 클래스의 속성을 얻는가
먼저 JDK가 제공하는 방법은 다음과 같습니다.
         a)Class.getDeclaredField(String name);      Field 대상, 이 대상은 이 Class 대상이 표시한 클래스나 인터페이스의 지정한 성명 필드를 반영합니다.     b)Class.getDeclaredFields();       Field 대상의 수조로 이 Class 대상이 표시하는 클래스나 인터페이스가 표시하는 모든 필드를 반영한다.    c)Class.getField(String name) ;        Field 대상, 이 Class 대상이 표시하는 클래스나 인터페이스의 지정된 공공 구성원 필드를 반영합니다.    d)Class.getField() ;
일부 Field 대상을 포함하는 그룹을 되돌려줍니다. 이 대상은 이 Class 대상이 표시하는 클래스나 인터페이스의 모든 접근 가능한 공공 필드를 반영합니다.
예를 들어 다음과 같이 설명하십시오.
솔리드 클래스:
 import java.util.Date;
/**
 * @ClassName: Student
 * @Description:  
 * @author JoseanLuo  
 * @date 2014-3-18  5:17:35
 * @version V1.0 
 */
public class Student
{
  private Long id;
  private String name;
  private Date createdate;
  private String no;
  public String nickname;
public Long getId()
{
    return id;
}
public void setId(Long id)
{
    this.id = id;
}
public String getName()
{
    return name;
}
public void setName(String name)
{
    this.name = name;
}
public Date getCreatedate()
{
    return createdate;
}
public void setCreatedate(Date createdate)
{
    this.createdate = createdate;
}
public String getNo()
{
    return no;
}
public void setNo(String no)
{
    this.no = no;
}
public String getNickname()
{
    return nickname;
}
public void setNickname(String nickname)
{
    this.nickname = nickname;
}
  
}

테스트 클래스:
import java.lang.reflect.Field;
import java.util.Date;
/**
 * @ClassName: ReflectFieldTest
 * @Description:  Field 。
 * @author JoseanLuo  
 * @date 2014-3-18  5:16:17
 * @version V1.0 
 */
public class ReflectFieldTest
{
 
    public static void main(String[] args)
{    Student stu=new Student();
     stu.setId(1L);
     stu.setName("Josean");
     stu.setNo("201403185203344");
     stu.setCreatedate(new Date());
     try
    {
        Field property1=stu.getClass().getDeclaredField("name");
        System.out.println(property1);//private java.lang.String com.cx.test.Student.name
        Field property3=stu.getClass().getField("nickname");
        System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname
        //  getField 
        //Field property2=stu.getClass().getField("name");
        //System.out.println(property2);
        // java.lang.NoSuchFieldException
        
        
    } catch (SecurityException e)
    {
        
        e.printStackTrace();
    } catch (NoSuchFieldException e)
    {
        
        e.printStackTrace();
    }
}
    
    
}

 
2. 속성 변경 내용 가져오기
   Field 。    get , get , 。    Accessible true, 。    set , , 。
import java.lang.reflect.Field;
import java.util.Date;
/**
 * @ClassName: ReflectFieldTest
 * @Description:  Field 。
 * @author JoseanLuo  
 * @date 2014-3-18  5:16:17
 * @version V1.0 
 */
public class ReflectFieldTest
{
 
    public static void main(String[] args) throws Exception
{    Student stu=new Student();
     stu.setId(1L);
     stu.setName("Josean");
     stu.setNo("201403185203344");
     stu.setCreatedate(new Date());
     stu.setNickname("copyman");
        Field property1=stu.getClass().getDeclaredField("name");
        //System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name
        Field property3=stu.getClass().getField("nickname");
        System.out.println(property3.get(stu));
        //System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname
        //  getField 
        //Field property2=stu.getClass().getField("name");
        //System.out.println(property2);
        // java.lang.NoSuchFieldException
        Field [] prFields4=stu.getClass().getDeclaredFields();
        for(Field field:prFields4)
        {
            System.out.println(field);
            System.out.println(field.equals(property1));
            // Accessible true
            field.setAccessible(true);
            // get 。
            System.out.println(field.get(stu));
        }
        // set 
        property3.set(stu, " , ");
         
        System.out.println(stu.getNickname());
        
}
    
    
}

copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
 , 


좋은 웹페이지 즐겨찾기