JAVA 반사 시리즈의 Field,java.lang.reflect.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
,
。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.