Переопределение метода в статически созданных объектах

Все,

Из-за ошибки в библиотеке я использую, я должен переопределить расположение () метод на всех объектах, расширяющих определенный класс, и сделать ее НЕТ. Я знаю, что, если я делаю новые экземпляры классов непосредственно, это легко сделать:

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"));

Существует ли способ, которым я могу ввести мой располагать метод в тот статически созданный объект, не изменяя исходный исходный код?

6
задан I82Much 26 May 2010 в 19:07
поделиться

2 ответа

Если клиент компилирует свой собственный код, вы можете использовать AspectJ для внедрения вашего метода dispose (). Другие варианты - это некоторые инструменты для модификации байт-кода, такие как cglib. Взгляните на этот список: http://java-source.net/open-source/bytecode-libraries

5
ответ дан 17 December 2019 в 02:24
поделиться

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

1
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: