Хобрук: Ваш путь к мастерству в программировании

Как добавить глобально доступный метаметод для объекта в Groovy?

(это обобщенный пример)

Я хотел бы создать служебный метод, который можно вызывать для любого объекта, он будет иметь подпись, например:

class StringMetaData {
    Object value
    String meta
}

Object.metaClass.withStringMetaData = { meta ->
   new StringMetaData(delegate, meta)
}

С идеей, что в любом месте моей программы я мог бы сделать что-то вроде:

def foo = 1.withStringMetaData("bar")

И теперь я могу получить foo.value для значения или foo.meta для прикрепленной строки.

В локальном контексте я могу определить этот метаметод для Object, но я хотел бы сделать его доступным глобально в своем приложении. Как правильно сделать этот метаметод доступным везде?

11.01.2013

Ответы:


1

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

11.01.2013
  • +1 Документация здесь 11.01.2013
  • Обратите внимание, что эта функция работает только в Groovy 2.0 или новее. 13.01.2013
  • Новые материалы

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

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

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..