자바 반사 메커니즘, 대상 을 통 해 호출 클래스 의 개인 구성원 속성 이나 방법 에 접근 합 니 다.
Class ( )。 , A a = new A();
a 。 , ,
A , new , ,
Method , Method 。
클래스 종류
클래스 text 의 대상 t 를 먼저 설명 합 니 다.
text1 t = new text1();
클래스 유형 을 얻 을 수 있 는 세 가지 방법 이 있 습 니 다:
Class t0 = text.class;// , Class class
Class t1 = t.getClass();//
Class t2 = null;
text t4 = null;
try {
t2 = Class.forName("classReflex.text");//
t4 = (text) t0.newInstance();//
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
주제 진입: 클래스 유형 을 통 해 클래스 의 구성원 변수, 방법, 구조 방법 에 대한 접근 과 호출 을 실현 합 니 다.
우선 클래스 text 1 입 니 다.
public class text1 {
public int x;
protected boolean b;
private String s;
public text1() {
// TODO Auto-generated constructor stub
}
public void f0() {
System.out.println(" ! Android!");
}
private void f0_private() {
System.out.println(" ! ! Android!");
}
public void f1(int i, String s1, boolean b) {
}
public int f2(int i, int s1, int b) {
return i;
}
public String f3(String i, String s1, String b) {
return i;
}
}
대상 을 이용 하여 클래스 의 구성원 변 수 를 얻 습 니 다.
public static void printClassAttribute(Object object) {
// , 。
Class c = object.getClass();
// , , , object 。
System.out.println(" :" + c.getName());
System.out.println(" :");
Field[] Fields = c.getDeclaredFields();
if (Fields.length > 0) {
for (Field field : Fields) {
Class type = field.getType();
System.out.println("field.getName()-->" + field.getName());
System.out
.println(field.getModifiers() + " " + type.getSimpleName() +
" m" + type.getSimpleName() + ";");
}
} else {
System.out.println(" ");
}
}
대상 을 이용 하여 클래스 를 얻 는 멤버 방법
클래스 형식 대상 을 통 해 클래스 에 접근 하 는 모든 방법
클래스 타 입 대상 을 통 해 클래스 를 호출 하 는 방법
public static void printClassMethod(Object object) {
// , 。
Class c = object.getClass();
// , , , object 。
System.out.println(" :" + c.getName());
System.out.println(" :");
/*
* Method 。 : , Method
* getMethods() ,
* getDeclaredMethods() 。
*/
// Method[] methods = c.getMethods();
Method[] methods = c.getDeclaredMethods();
for (Method method : methods) {
//
Class returnTyoe = method.getReturnType();
System.out.print(returnTyoe.getSimpleName() + " " + method.getName() + "(");
//
Class[] parameterTypes = method.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++) {
Class parameterType = parameterTypes[i];
if (i != 0)
System.out.print(" , ");
System.out.print(parameterType.getSimpleName() + " par" + i);
}
System.out.println(");");
}
System.out.println("methods.length-->" + methods.length);
/**
* public f0();
* Method ,
*/
Method m;
try {
m = c.getMethod("f0", null);
m.invoke(c.newInstance(), null);// ,
// , , m.invoke(c, null);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException |
IllegalArgumentException
| InvocationTargetException | InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* private f0();
* m_private.setAccessible(true);// ,
*/
Method m_private;
try {
m_private = c.getDeclaredMethod("f0_private", null);
m_private.setAccessible(true);// , , ,
m_private.invoke(c.newInstance(), null);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException |
IllegalArgumentException| InvocationTargetException | InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
대상 획득 류 의 구조 방법 을 이용 하 다.
구성원 을 호출 하 는 방법 과 유사 하여 더 이상 설명 을 하지 않 는 다.
public static void printStructureMethod(Object object) {
Class c = object.getClass();
// , , , object 。
System.out.println(" :" + c.getName());
System.out.println(" :");
Constructor[] constructors = c.getConstructors();
for (int i = 0; i < constructors.length; i++) {
Constructor constructor = constructors[i];
System.out.print(constructor.getName() + " (");
Class[] parameterTypes = constructor.getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
Class parameterType = parameterTypes[j];
if (j != 0)
System.out.print(" , ");
System.out.print(parameterType.getSimpleName());
}
System.out.println(")");
}
}
소스 코드 다운로드 링크 CSDN 다운로드 링크:http://download.csdn.net/detail/d_inosaur / 9855095 야드 클 라 우 드 링크:https://gitee.com/D_inasour/codes/ursvnom912cghatek7q3z89#Reflex.rar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.