【问题标题】:Overriding a method in statically created objects覆盖静态创建的对象中的方法
【发布时间】:2011-02-24 08:22:18
【问题描述】:

全部,

由于我正在使用的库中存在错误,我需要在扩展某个类的所有对象上覆盖 dispose() 方法并使其成为 NO-OP。我知道如果我直接创建类的新实例,这很容易做到:

layerManager = new LayerManagerLayer(wwd) {
    @Override
    public void dispose() {}
};

问题是我得到的很多对象实例不是由我的客户端代码直接构造的,而是通过静态库方法调用创建的。

// Here I want to override the dispose method, but I cannot.
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource("polylines10.shp"));

有没有一种方法可以在不修改原始源代码的情况下将我的 dispose 方法注入到静态创建的对象中?

【问题讨论】:

  • “有没有一种方法可以 [...] 而不修改原始源代码?” - 第 1 课 - 避免使用至少没有的库修改源代码以修复 show-stopper 错误的选项。

标签: java overriding worldwind


【解决方案1】:

如果客户自己编译代码,你可以使用 AspectJ 来注入 Your around dispose() 方法。 其他选项是一些字节码修改工具,如 cglib。看看这个列表: http://java-source.net/open-source/bytecode-libraries

【讨论】:

    【解决方案2】:

    您可以使用像Javassist 这样的字节码操作库。您基本上需要获取 LayerManagerLayer 类的字节码并向其注入 dispose 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多