Как переопределить метод в jar-файле? - PullRequest
1 голос
/ 14 июля 2011

У меня есть метод в классе, и файл jar создается с использованием этого класса.Файл jar включен в проект.Как я могу переопределить этот метод в приложении?Пожалуйста, помогите

Ответы [ 5 ]

1 голос
/ 14 июля 2011

Если вы хотите «исправить» текущее поведение, вам нужно скопировать существующий java-файл, обновить метод, который вы хотите переопределить, и поместить его .class вперед в CLASSPATH.

1 голос
/ 14 июля 2011

@ Пабло Санта-Крус прав (+1): вы не можете изменить существующий код.Вы должны унаследовать существующий класс и переопределить то, что хотите в подклассе.

НО, если вы действительно хотите что-то изменить в существующем скомпилированном модуле, вы все равно можете сделать это, используя методы модификации байт-кода.Есть много пакетов, которые могут сделать это.Также может помочь популярный пакет более высокого уровня, который реализует аспектно-ориентированную парадигму для Java AspectJ.

1 голос
/ 14 июля 2011

Вам нужно создать подкласс класса внутри вашего JAR, а затем переопределить метод. Невозможно «изменить» существующий метод в существующем классе в Java, если вы не измените исходный код и не перекомпилируете его.

0 голосов
/ 14 июля 2011

Если вы думаете о переопределении метода в уже загруженном классе, посмотрите на это Отражение Java: как переопределить или сгенерировать методы во время выполнения?

0 голосов
/ 14 июля 2011

Если вы говорите о переопределении метода с точки зрения наследования от класса, а затем о переопределении его (т. Е. С полиморфной точки зрения), тогда, если класс не является окончательным, вы можете расширять его, как и любой другой.

Если вы говорите об изменении поведения метода внутри самого файла jar, вам нужно получить исходный код, изменить метод самостоятельно, затем перекомпилировать его и упаковать в другой файл jar.Обратите внимание, однако, что я действительно не рекомендовал бы такой подход, особенно если jar - это обычный библиотечный jar - кто-то, обслуживающий ваш код позже, будет действительно сбит с толку / взломан, если поведение библиотечного класса было изменено (исправление ошибки в стороне)!

Если у вас нет исходного кода, тогда да, вы можете взломать байт-код и делать то же самое.Но я уверен, что это не то, что нужно здесь: -)

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