2013-12-09 2 views
3

Я добавил метод compareTo в класс byte[], используя Groovy Extension Module. Тем не менее, я также хотел бы добавить интерфейс Comparable в тот же класс, но не мог понять, как это сделать.Как динамически добавлять интерфейс к существующему классу Java в Groovy

Я предполагаю, что это возможно с помощью преобразований АСТ. Или, может быть, есть более простой способ? Возможно, манипулируя метаклассом expando?

ответ

2

Вы не можете сделать это с помощью трансформации AST. Преобразование AST применимо только к классам Groovy, когда byte[] является JDK.

Metaclass позволяет вам добавлять свои собственные методы и свойства в класс, но не может изменять поведение java inner instanceof. Таким образом, вы не можете добавить интерфейс к базовому классу JDK для использования в библиотеках Java.

Возможно, вам следует рассмотреть возможность использования класса-обертки, реализующего Comparable.

+0

Да, конечно, вы правы. Таким образом, трансформации АСТ не являются решением. Это не большая проблема, и, как вы полагаете, есть простые способы обхода. Просто подумал, что это возможно достичь как-то ... Спасибо за ответ. – Steinar

+0

Если вы решили использовать обертку, отметьте аннотацию @Delegate. – topr

+0

@topr Вы меня предупредили. Может быть, лучше использовать '@ Steinar', чтобы уведомить афер? ;) – Seagull

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