Java 在什么情况下ByteBuddy代理类将无法访问自己定义的私有字段?
我正试图理解这个难以理解的错误消息:Java 在什么情况下ByteBuddy代理类将无法访问自己定义的私有字段?,java,byte-buddy,Java,Byte Buddy,我正试图理解这个难以理解的错误消息: 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$ForExp
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)
java.lang.IllegalStateException:无法从类com.bar.$MyProxy.MethodInvoker访问私有final com.foo.TestMethodInvoker$foo com.bar.$MyProxy.methodHousing
在net.bytebuddy.implementation.MethodCall$TargetHandler$ForField$Location$ForExplicitField.resolve(MethodCall.java:2406)
在net.bytebuddy.implementation.MethodCall$TargetHandler$ForField$Factory.make(MethodCall.java:2444)
位于net.bytebuddy.implementation.MethodCall$Appender。(MethodCall.java:3500)
位于net.bytebuddy.implementation.MethodCall.appender(MethodCall.java:676)
net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation.compile(MethodRegistry.java:233)
net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation.compile(MethodRegistry.java:205)
net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared.compile(MethodRegistry.java:740)
net.bytebuddy.dynamic.scaffold.subclass.subclass.dynamicTypeBuilder.make(subclass dynamicTypeBuilder.java:218)
在net.bytebuddy.dynamic.scaffold.subclass.subclass-dynamictypebuilder.make(subclass-dynamictypebuilder.java:204)
位于net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3595)
位于net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3819)
我有一个单元测试(TestMethodInvoker
),它定义了一个名为Foo
的publicstatic
嵌套类
我的ByteBuddy配方定义了一个名为methodHousing
的私有final com.foo.TestMethodInvoker$foo
字段
我使用FieldAccessor.of
对该字段执行各种操作。(或者我正在努力!)
错误消息似乎告诉我,我的代理类无法访问自己的私有字段(!)
在什么情况下会是这样?或者我做错了什么?您遇到了一个错误。这将在1.10.14中发布
如果同时希望避免此错误,请避免将显式字段引用作为参数,但应提供一个解析字段的匹配器。我建议发布代码以再现错误。如果你当时得到了真实的答案,我不会感到惊讶。