環境
- Java 21
- org.apache.commons:commons-lang3:3.19.0
ソースコードなど
java.lang.Stringとかjava.lang.EnumとかをReflectionToStringBuilder.toStringの引数に直接指定すると下記のような実行時エラーになる。標準ライブラリのクラスのprivateフィールドにアクセスしようとしてしまうためアクセス例外となってしまう。おそらく、Java 8以前なら動いてしまうのではないか? と思われる。
System.out.println(ReflectionToStringBuilder.toString("str"));
System.out.println(ReflectionToStringBuilder.toString(SampleEnum.HOGE));
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field static final boolean java.lang.String.COMPACT_STRINGS accessible: module java.base does not "opens java.lang" to unnamed module @506c589e
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private int java.lang.Enum.hash accessible: module java.base does not "opens java.lang" to unnamed module @446cdf90