Я пытаюсь понять это непостижимое сообщение об ошибке:
java.lang.IllegalStateException: Cannot access private final com.foo.TestMethodInvoker$Foo com.bar.$MyProxy.methodHousing from class com.bar.$MyProxy
at net.bytebuddy.implementation.MethodCall$TargetHandler$ForField$Location$ForExplicitField.resolve(MethodCall.java:2406)
at net.bytebuddy.implementation.MethodCall$TargetHandler$ForField$Factory.make(MethodCall.java:2444)
at net.bytebuddy.implementation.MethodCall$Appender.<init>(MethodCall.java:3500)
at net.bytebuddy.implementation.MethodCall.appender(MethodCall.java:676)
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation.compile(MethodRegistry.java:233)
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation.compile(MethodRegistry.java:205)
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared.compile(MethodRegistry.java:740)
at net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.make(SubclassDynamicTypeBuilder.java:218)
at net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.make(SubclassDynamicTypeBuilder.java:204)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3595)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3819)
У меня есть модульный тест (TestMethodInvoker
), который определяет public static
вложенный класс с именем Foo
.
Рецепт My ByteBuddy определяет поле private final com.foo.TestMethodInvoker$Foo
с именем methodHousing
.
Я использую FieldAccessor.of
для различных операций с этим полем. (Или я пытаюсь!)
Сообщение об ошибке говорит мне, что мой прокси-класс не может получить доступ к собственному закрытому полю (!).
При каких обстоятельствах это будет правдой ? Или что я сделал не так?