Java - 在实例化时使用反射来防止字段分配?

标签 java reflection constructor

我在第 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 的一部分吗?

  1. 如果不是,我猜这是版本问题。

  2. 否则你应该寻找你的库的错误修复版本或打开一个票。

  3. 最后但同样重要的是,您可以使用 AspectJ 加载时编织在类加载时操作字节码。但这要求您始终以加载时编织开始您的代码。参见 Load-Time Weaving .

所以我个人更喜欢选项 1 或 2。

关于Java - 在实例化时使用反射来防止字段分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378167/

相关文章:

c# - 防止程序集名称更改每次运行

java - 在 Java 中使用 Object.getClass() 是一种不好的做法吗?

java - 创建一个对象并将其打印出来,但结果打印了引用。怎么解决这个问题呢?

java - 从 WebElement 中提取定位器并使用 pagefactory

java - WebSphere 7 - 过多的垃圾收集会导致内存不足吗?

java - Java 中的低音增强

c# - 在 C# 中获取属性值(反射)的最快方法

dependency-injection - Angular2 RC BaseRequestOption 构造函数注入(inject)

c++ - 奇怪的对象分配行为 c++

javascript - 使用 Selenium Webdriver 的 ExtJS 测试自动化