Java 반사의 개인 필드 및 방법 상세 설명

비록 우리는 일반적으로 JAVA의 반사 메커니즘을 통해 다른 종류의 개인 필드와 개인 방법에 접근하는 것이 가능하다고 생각하지만, 사실은 그렇게 어렵지 않다.주석: 단원 테스트나 일반적인 프로그램처럼 단독 JAVA 프로그램에서 이 코드를 실행해야만 유효합니다.이 방법을 JAVA APPLET에서 사용하려면 Security Manager를 약간 수정해야 합니다.하지만, 당신이 자주 그것과 접촉해야 하는 것은 아니기 때문에, 여기도 더 이상 군말을 하지 않을 것이다.이번 내용 목록입니다: 1.개인 필드에 액세스합니다.2. 개인 접근 방법.개인 필드에 접근: 개인 필드에 접근하기 위해서는 Class를 호출해야 합니다.getDeclaredField(String name) 또는 Class.getDeclaredFields() 메서드.방법 클래스.getField(String name) 및 Class.getFields () 는 공유된 필드만 되돌려주기 때문에 사용할 수 없습니다.여기에 하나의 예가 있습니다. 이 예에는 개인 필드를 포함하는 클래스가 있습니다. 이 클래스 아래에는 반사를 통해 개인 필드에 접근하는 코드가 있습니다
 
public class PrivateObject {
private String privateString = null; //
public PrivateObject(String privateString) {
this.privateString = privateString;
}
}
 
PrivateObject privateObject = new PrivateObject("The Private Value");//
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);//
String fieldValue = (String) privateStringField.get(privateObject);//
System.out.println("fieldValue = " + fieldValue);
이 코드는 텍스트 "fieldValue = The Private Value"를 출력합니다. 이 값은 대상 PrivateObject의 개인 필드인privateString의 값입니다.우리가 Private Object를 사용한 것을 알아차렸다.class.getDeclaredfield("privateString").바로 이 호출이 개인 필드로 되돌아왔습니다.이 방법은 지정한 클래스에 따라 필드를 되돌릴 뿐, 부류가 설명한 필드는 되돌려 주지 않습니다.또 굵은 문장을 자세히 관찰한다.필드를 호출합니다.setAccessible(true), 이 지정한 필드의 실례에 대한 접근 검사를 껐습니다. 반사에만 효과가 있습니다.개인, 보호, 기본 (default) 이든 간에 즉시 호출자는 이 범위에 있지 않습니다.컴파일러가 허용하지 않기 때문에 일반적인 방법으로 이 필드에 접근할 수 없습니다.개인 접근 방법은 개인 접근을 위해 Class를 호출해야 합니다.getDeclaredMethod(String name, Class[] parameterTypes) 또는 Class.getDeclaredMethods() 메서드.방법 클래스.getMethod(String name, Class[] parameterTypes) 및 Class.getMethods()는 공유 방법만 되돌려주기 때문에 작동하지 않습니다.다음은 간단한 예입니다. 이 예에는 사유 방법을 가진 클래스가 있습니다. 클래스 아래에는 반사 메커니즘을 통해 사유 방법에 접근하는 코드가 있습니다
 
public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
private String getPrivateString(){//
return this.privateString;
}
}
 
PrivateObject privateObject = new PrivateObject("The Private Value");
Method privateStringMethod = PrivateObject.class.
getDeclaredMethod("getPrivateString", null);
privateStringMethod.setAccessible(true);
String returnValue = (String)
privateStringMethod.invoke(privateObject, null);
System.out.println("returnValue = " + returnValue);
이 코드 예는 텍스트'returnValue = The private Value'를 출력합니다. 이 값은 개인 방법의 반환값입니다.

좋은 웹페이지 즐겨찾기