java 반사_프라이빗의 변수와 방법을 바꾸는 간단한 실례
class DemoTest{
private String name="123";
public getName(){
system.out.println("public getName " + name);
return name;
}
private getName2(){
system.out.println("private getName2 " + name);
return name;
}
}
이것과 같이name의 값을 바꾸십시오.어떻게 바꿀까?자바 반사를 통해 어떻게 바꿉니까getName 메서드를 반사로 호출하는 방법을 먼저 살펴보겠습니다.
class<DemoTest> calzz=DemoTest.class;
Constructor cons=clazz.getConstructor(new class[]{});// class 。 。
예: DemoTest에는 public DemoTest(String arg0, String arg1)를 구성하는 방법이 있습니다. {...}이때 Constructor cons=clazz.getConstructor(new class[]{String.class,String.class});두 개의 String.calss는 각각arg0,arg1에 대응한다.
다음은 다음과 같습니다.
DemoTest test=(DemoTest)cons.newInstance(new Object[]{});// 。 new Object[]{} 。 :
DemoTest test=(DemoTest)cons.newInstance(new Object[]{“ ”," "});
다음:
Method method=clazz.getMethod("getName",new Class[]{String.class});
method.invoke(test,new Object[]{" "});
이때 왕5를 출력할 수 있다.그럼name을private의 값으로 어떻게 변경합니까?
일.먼저 필드를 얻고,
Field field=clazz.getDeclaredField("name");
2. 이 대상의accessible 로고를 표시된 부울 값으로 설정합니다.true 값은 반사된 객체를 사용할 때 Java 언어 액세스 확인을 취소해야 함을 나타냅니다.false 값은 반사된 객체가 Java 언어 액세스 검사를 실시해야 함을 나타냅니다.
field.setAccessible(true);
3. 변수 값 수정
field.set("name"," ");
OK;사유를 방문하는 방법도 마찬가지다.
Method method=clazz.getDeclaredMethod("getName2");
method.setAccessible(true);
method.invoke(test,new Object[]{" "});
getDeclaredFields로 private와 public protected 필드를 얻을 수 있습니다.c.getFields()를 사용하는 경우퍼블릭 형식의 속성만 얻을 수 있습니다
이상 이 자바 반사_프라이빗의 변수와 방법을 바꾸는 간단한 실례는 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.