내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
java:reflection
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Java Reflection ====== * [[http://tutorials.jenkov.com/java-reflection/index.html|Java Reflection Tutorial]] * [[http://www.javacodegeeks.com/2014/11/java-reflection-api-tutorial.html|Java Reflection API Tutorial]] ===== Field/Method 선언 순서 ===== * 필드와 메소드의 선언 순서대로 리플렉션에서 값을 읽을 수 없다. * JDK 6 부터 Reflection 에서 field/method 순서에 따라 응답을 주기는 하고 있으며, 이후 버전도 이런 기조를 유지하고는 있으나 reflection API에서는 이 순서에 대해 명시하지 않고 있고, 따라서 이 순서가 변경될 가능성이 존재하는 것도 사실이다. 그러나 그런일이 없을 거라고 예상한다. * [[https://coderedirect.com/questions/143527/java-reflection-getting-fields-and-methods-in-declaration-order|[Solved] Java Reflection: Getting fields and methods in declaration order - Code Redirect]] ===== Accessing Private Field ===== <code java> 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); </code> ===== Accessing private method ===== <code java> 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); </code> ===== Class.isAssignableFrom() ===== ''A.class.isAssignableFrom(B.class)''는 ''A a = new B()''가 가능한지를 묻는 것이라고 보면된다. <code java> assertThat(Serializable.class.isAssignableFrom(String.class)).isTrue(); assertThat(String.class.isAssignableFrom(Serializable.class)).isFalse(); </code> ===== private static final 필드 읽기/변경 ===== * [[https://javahowtodoit.wordpress.com/2014/09/12/how-to-get-and-set-private-static-final-field-using-java-reflection/|How to get and set private static final field using Java reflection | Java: How To Do It]] <code java> class MyClass4 { private static final Boolean enabled = Boolean.FALSE; // 읽고 변경할 대상 필드 public static Boolean getEnabled() { return enabled; } } // "enabled" 필드 인스턴스 확보 Field field = MyClass4.class.getDeclaredField("enabled"); field.setAccessible(true); // Suppress Java language access checking // "final" modifier 제거 Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); // 값 읽기 Boolean fieldValue = (Boolean) field.get(null); System.out.println(fieldValue); // -> false // 값 쓰기 field.set(null, Boolean.TRUE); System.out.println(MyClass4.getEnabled()); // -> true </code>
java/reflection.txt
· 마지막으로 수정됨: 2023/11/30 14:53 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로