2014-12-24 3 views
-2

Я хочу создать класс Toto, который реализует интерфейс Titi. Общий путь:Создайте класс, который реализует интерфейс без изменения кода класса

public class Toto implements Titi 

Проблема в том, я Автогенераторный класс Тото и это не практично, чтобы добавить каждый раз реализует Тити. Есть ли способ заставить его реализовать интерфейс в Java EE 6. (например, AOP) и дайте мне пример

+1

Для АОП вы можете использовать Spring. –

+0

Подклассируйте его в свой код и добавьте то, что вам нужно. –

+0

Другими словами, не используйте сгенерированный класс напрямую; подкласс с дополнительной функциональностью, в которой вы нуждаетесь. Я часто делал это с классами Hibernate, хотя композиция - это еще один подход, возможно, лучший. –

ответ

2

У вас есть несколько решений. Не зная природу генерации кода, трудно помочь вне общих черт. Тем не менее, АОП кажется излишним.

  1. Изменить шаблон, который генерирует свой источник, или использовать его источник функциональности Gen в
  2. Alter источник пост поколения.
  3. Используйте подкласс или композит в своем источнике.

1. Если вы можете, измените шаблоны. Большинство генераторов знают, что источник, который они генерируют, может не соответствовать точно вашим потребностям и разрешить либо вставку кода, либо модификацию подписи. Даже если это не супер-легко, у большинства из них есть шаблоны, которые вы можете вытащить из класса и переупаковать.

2. Простой поиск и замена могут изменить подпись кода, и вы можете наполнить свою собственную реализацию в конце сгенерированного класса. Это должно быть интегрировано в ваш процесс сборки.

3. Мой выбор будет состоять в том, чтобы либо скомпилировать сгенерированный класс в свой класс, либо подклассировать его, если имеет смысл это сделать. Это супер, супер легко и требует только тривиальных, автоматических изменений. Я также могу изменить имя сгенерированного класса.

Другими словами, у вас есть класс Toto с некоторыми сгенерированных методов, скажем someMethod:

public class Toto { 
    public void someMethod() { ... } 
} 

Создать новый, хорошо названный класс, что либо подклассы это, или композиты в, соответственно:

Для некоторых типов проблем я бы не стал жаловаться на расширение Toto таким образом, например, для DAO может иметь смысл просто придерживаться дополнительных функций. Наследование может быть болью в некоторых (наиболее?) Ситуациях, и компоновка может быть более безопасной. IDE могут генерировать делегированные методы, или вы можете использовать манипуляции с байтовым кодом (например, Lombok) для автоматического генерации делегатов, но использование среды IDE является более универсальным.

Смежные вопросы