2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[item 89] AccessibleObject #196

Open NuhGnod opened 10 months ago

NuhGnod commented 10 months ago

p.477 하단의 AccessibleObject.setAccessible 의 메소드는 무엇인지 궁금합니다..!

ssstopeun commented 10 months ago

Item 3 에서 잠깐 나왔더라구요! 이 메소드는 private생성자를 호출하는 메소드라고 되어있었습니다. Item 3 이 private생성자나 열거 타입으로 싱글턴임을 보증하라. 라는 부분인데 생성자를 private로 생성하면 인스턴스가 하나뿐임이 보장되지만 AccessibleObject.setAccessible로 호출하는 예외가 존재한다고 나옵니다.

privateMethodXX.setAccessible(true/false) 이런식으로 외부에서의 접근을 설정할 수 있는 것 같은데 정확한 사용법은 잘 모르겠네요ㅠㅠ

NuhGnod commented 10 months ago

https://www.tabnine.com/code/java/methods/java.lang.reflect.AccessibleObject/setAccessible

NuhGnod commented 10 months ago

https://www.tabnine.com/code/java/methods/java.lang.reflect.AccessibleObject/setAccessible?snippet=5921663d4758780004fe7c90

NuhGnod commented 10 months ago
final Field field = String.class.getDeclaredField("value");
 field.[setAccessible](https://www.tabnine.com/code/java/methods/java.lang.reflect.AccessibleObject/setAccessible)(true);
 try {
   final char[] chars = (char[]) field.get(data);
   final int len = chars.length;
   for (int i = 0; i < len; i++) {
     if (chars[i] <= ' ') {
       doThrow();
     }
   }
   return len;
 } catch (Exception ex) {
   throw new RuntimeException(ex);
 }