java 반사_프라이빗의 변수와 방법을 바꾸는 간단한 실례

2124 단어 java반사private
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()를 사용하는 경우퍼블릭 형식의 속성만 얻을 수 있습니다
이상 이 자바 반사_프라이빗의 변수와 방법을 바꾸는 간단한 실례는 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기