Все,
Из-за ошибки в библиотеке я использую, я должен переопределить расположение () метод на всех объектах, расширяющих определенный класс, и сделать ее НЕТ. Я знаю, что, если я делаю новые экземпляры классов непосредственно, это легко сделать:
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"));
Существует ли способ, которым я могу ввести мой располагать метод в тот статически созданный объект, не изменяя исходный исходный код?
Если клиент компилирует свой собственный код, вы можете использовать AspectJ для внедрения вашего метода dispose (). Другие варианты - это некоторые инструменты для модификации байт-кода, такие как cglib. Взгляните на этот список: http://java-source.net/open-source/bytecode-libraries
Вы можете использовать библиотеку для работы с байтовым кодом, например Javassist . Вам нужно в основном получить байтовый код вашего класса LayerManagerLayer и внедрить в него метод удаления.