我在第 3 方库中有一个 java 类,它有一个在类实例化时分配的私有(private)成员。
public class CacheLookupUtil extends AbstractCacheLookupUtil<InvocationContext> {
@Inject
private BeanManagerUtil beanManagerUtil;
private CacheKeyGenerator defaultCacheKeyGenerator = new DefaultCacheKeyGenerator();
private CacheResolverFactory defaultCacheResolverFactory = new DefaultCacheResolverFactory();
...
...
}
我的问题是 defaultCacheResolverFactory
的分配由于选择了错误的构造函数而导致异常。
如果我尝试将 CacheLookupUtil
子类化,这个赋值仍然在父类中完成,所以我没有进一步前进。
我可以在 Java 反射中使用任何机制来构造/实例化对象,但阻止分配 defaultCacheResolverFactory
,并允许我通过反射设置值吗?
我知道这是一个丑陋的解决方案,但老实说,我无法想象任何其他方式来继续。
最佳答案
DefaultCacheResolverFactory 是您的库 jar 的一部分吗?
如果不是,我猜这是版本问题。
否则你应该寻找你的库的错误修复版本或打开一个票。
最后但同样重要的是,您可以使用 AspectJ 加载时编织在类加载时操作字节码。但这要求您始终以加载时编织开始您的代码。参见 Load-Time Weaving .
所以我个人更喜欢选项 1 或 2。
关于Java - 在实例化时使用反射来防止字段分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378167/