Java 반사의 개인 필드 및 방법 상세 설명
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'를 출력합니다. 이 값은 개인 방법의 반환값입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.