При каких обстоятельствах прокси-класс ByteBuddy не сможет получить доступ к своим собственным определенным частным полям? - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь понять это непостижимое сообщение об ошибке:

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 для различных операций с этим полем. (Или я пытаюсь!)

Сообщение об ошибке говорит мне, что мой прокси-класс не может получить доступ к собственному закрытому полю (!).

При каких обстоятельствах это будет правдой ? Или что я сделал не так?

1 Ответ

1 голос
/ 16 июля 2020

Вы столкнулись с ошибкой, которую я только что исправил в основной ветке . Это будет выпущено в Byte Buddy 1.10.14.

Если вы хотите избежать этой ошибки, избегайте явной ссылки на поле в качестве аргумента, но предоставьте сопоставление, которое разрешает поле.

...