Добавление методов / изменение классов банку - PullRequest
0 голосов
/ 03 октября 2011

Очень глупый вопрос, я делаю проект, и я не могу думать о каком-либо обходном пути. Я реализовал новые функции в open jar (назовем это конвертером), я хочу изменить один из нихметоды: ExchangeToEuro, ExchangeToDollar, CheckCurrency.

Мой вопрос такой: есть ли механизм, для которого я могу добавить функциональность (изменение этих методов или даже добавление методов в этот класс) в класс без изменения jar (без изменения классов, присутствующих в банке)?

Я думал о декораторе классов, но это не сработало бы, поскольку мне нужно было бы изменить саму банку.

Ответы [ 3 ]

2 голосов
/ 03 октября 2011

Вы можете расширять классы в Converter.jar, если они не являются окончательными, и переопределять методы, содержащиеся в них, до тех пор, пока они являются видимыми и не являются окончательными.Скажем, у Converter.jar есть такой класс:

public class ExchangeToDollar {
    public BigDecimal exchangeEuroToDollar(final BigDecimal euroValue) {
        ...method implementation....
    }
}

Вы можете расширить и переопределить его так:

public class MyClass extends ExchangeToDollar {
    @Override
    public BigDecimal exchangeEuroToDollar(final BigDecimal euroValue) {
        ...your implementation....
    }
}

Метод MyClass.exchangeEuroToDollar(BigDecimal) переопределяет реализацию exchangeEuroToDollar(BigDecimal), которая содержится вкласс ExchangeToDollar в Converter.jar означает, что при вызове метода в экземпляре MyClass ваша реализация будет выполнена.

Недостатком реализации этого типа является то, что любой код, который выне иметь контроля над тем, что использует ExchangeToDollar, не сможет использовать вашу переопределенную реализацию, если вы не можете вместо этого передать экземпляр MyClass.

1 голос
/ 03 октября 2011

Расширьте классы, добавьте, какие новые функции требуются, и переопределите то, что должно измениться.

1 голос
/ 03 октября 2011

Не совсем ясно, какие модификации вам нужно внести, но если вам нужно изменить сами методы класса, ваши параметры ограничены такими вещами, как AspectJ или менее чистыми формами манипулирования байт-кодом с использованием таких инструментов, как BCEL или ASM .

Можно создать дополнительные функциональные возможности на другом языке JVM, например Groovy / etc., Скомпилировать в файлы .class и использовать их.

Возможно, вам потребуется предоставить более и / или менее противоречивую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...