자바 반사 메커니즘에 대해 간단히 이야기하다.
1. 고객에 대한 정보를 표시하기 위해 Customer 클래스를 먼저 정의합니다.
public class Customer {
private Long id;
private String name;
private int age;
private String phone;
public Customer() {
}
public Customer(Long id,String name,int age,String phone) {
this.id=id;
this.name=name;
this.age=age;
this.phone=phone;
}
public final Long getId() {
return id;
}
public void setId(Long id) {
this.id=id;
}
public final String getName() {
return name;
}
public final void setName(String name) {
this.name=name;
}
public final int getAge() {
return age;
}
public void setAge(int age) {
this.age=age;
}
public final String getPhone() {
return phone;
}
public void setAge(String phone) {
this.phone=phone;
}
}
2.이제 Customer 실례의 모든 구조 방법과 일반적인 방법 및 속성 정보를 얻기 위해 클래스를 작성합니다
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionApplication {
/**
* @param args
*/
public static void ShowObjectInfo(Object obj) throws Exception {
Class c=obj.getClass();
int i;
System.out.println(obj.toString()+" :");
Constructor [] cs=c.getConstructors();
for(i=0;i<cs.length;i++) {
System.out.println(cs[i].toString());
}
System.out.println(obj.toString()+" :");
Method [] methods=c.getDeclaredMethods();
for(i=0;i<methods.length;i++) {
System.out.println(methods[i].toString());
}
System.out.println(obj.toString()+" :");
Field[] fields=c.getDeclaredFields();
for(i=0;i<fields.length;i++) {
System.out.println(fields[i].toString());
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Customer customer=new Customer(001L,"wangzhicheng",28,"13866916216");
ShowObjectInfo(customer);
}
}
3. 실행 결과:
Customer@1fb8ee3 :
public Customer()
public Customer(java.lang.Long,java.lang.String,int,java.lang.String)
Customer@1fb8ee3 :
public void Customer.setId(java.lang.Long)
public final int Customer.getAge()
public void Customer.setAge(int)
public void Customer.setAge(java.lang.String)
public final java.lang.String Customer.getPhone()
public final java.lang.String Customer.getName()
public final java.lang.Long Customer.getId()
public final void Customer.setName(java.lang.String)
Customer@1fb8ee3 :
private java.lang.Long Customer.id
private java.lang.String Customer.name
private int Customer.age
private java.lang.String Customer.phone
private java.lang.String Customer.phone
반사
이상의 실례를 통해 알 수 있듯이 자바 운행 환경에서 임의의 클래스나 대상에 대해 우리는 이 클래스나 대상에 어떤 속성과 방법이 있는지 알 수 있다.뿐만 아니라, 임의의 대상에 대해, 우리는 실행할 때, 그것의 임의의 방법을 호출할 수 있다.이런 동적 접근 클래스의 정보를 얻고 대상을 호출하는 방법은 바로 자바의 반사 기술이다.
3. 왜 반사적인 존재가 있는지--java에서.lang. Class 클래스
자바 프로그램이 실행될 때, 자바가 실행될 때 시스템은 모든 대상에 대해 이른바 실행시 유형 표식을 해 왔다. 이 작업은 모든 대상이 속한 클래스를 기록하고, 이러한 유형의 정보를 저장하는 데 사용되는Class 클래스이다.따라서 Class를 통해 클래스에 대한 정보를 얻을 수 있습니다. 전례와 같습니다.
4반사 기술의 간단한 응용 - 런타임 시 객체 복사
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
public class CopyObject {
/**
* @param args
*/
public static Object copy(Object source) throws Exception {
Class<?>c=source.getClass(); // source
Object obj=c.newInstance(); // source
Field[] fields=c.getDeclaredFields(); //
for(int i=0;i<fields.length;i++) {
Field field=fields[i];
String fieldName=field.getName(); //
String firstLetter=fieldName.substring(0,1).toUpperCase(); //
String getMethodName="get"+firstLetter+fieldName.substring(1); // get
String setMethodName="set"+firstLetter+fieldName.substring(1); // set
Method getMethod=c.getMethod(getMethodName, new Class[]{}); // get
Method setMethod=c.getMethod(setMethodName, new Class[]{field.getType()});
// set , field.getType
Object value=getMethod.invoke(source, new Object[]{});
// get
System.out.println(fieldName+":"+value);
setMethod.invoke(obj, new Object[]{value});
// set
}
return obj;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Customer customer=new Customer(001L,"wangzhicheng",28,"13866916216");
Customer customercopy=(Customer)copy(customer);
System.out.println(" :");
System.out.println(customercopy.getId()+" "+customercopy.getName()+" "+
customercopy.getAge()+" "+customercopy.getPhone());
}
}
실행 결과:
id:1
name:wangzhicheng
age:28
phone:13866916216
:
1 wangzhicheng 28 13866916216
오반사도 부작용이 있어 프로그램의 성능에 영향을 미친다
6 가지 추가 참조: Java Reflection in Action
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.