사용자 도구

사이트 도구


java:reflection

Java Reflection

Field/Method 선언 순서

  • 필드와 메소드의 선언 순서대로 리플렉션에서 값을 읽을 수 없다.
  • JDK 6 부터 Reflection 에서 field/method 순서에 따라 응답을 주기는 하고 있으며, 이후 버전도 이런 기조를 유지하고는 있으나 reflection API에서는 이 순서에 대해 명시하지 않고 있고, 따라서 이 순서가 변경될 가능성이 존재하는 것도 사실이다. 그러나 그런일이 없을 거라고 예상한다.

Accessing Private Field

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);

Accessing private method

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);

Class.isAssignableFrom()

A.class.isAssignableFrom(B.class)A a = new B()가 가능한지를 묻는 것이라고 보면된다.

assertThat(Serializable.class.isAssignableFrom(String.class)).isTrue();
assertThat(String.class.isAssignableFrom(Serializable.class)).isFalse();
java/reflection.txt · 마지막으로 수정됨: 2021/10/27 10:05 저자 kwon37xi