Что такое использование Meta-класса в Groovy и других языках программирования OO?
Что такое Groovy MetaClass?
Ответ 1
Вы, наверное, думаете о Groovy MetaClass:
MetaClass в Groovy определяет поведение любого данного Groovy или Java класс. Интерфейс MetaClass определяет две части. Клиентский API, который определяется через расширение Интерфейс MetaObjectProtocol и контракт с Groovy runtime система. В общем компилятор и Groovy Runtime Engine взаимодействовать с методы этого класса, в то время как MetaClass клиенты взаимодействуют с методом определяется MetaObjectProtocol интерфейс
Groovy MetaClass позволяет назначать поведение и состояние классам во время выполнения без редактирования исходного исходного кода, то есть уровня выше исходного класса.
Это механизм, используемый Groovy для расширения объектов Java JDK.
Пример:
Object.class.metaClass.explode{-> println "Boom! ${delegate} Exploded!"}
"SomeString".explode();
12345.explode();
Выход:
Boom! SomeString Exploded!
Boom! 12345 Exploded!
Для более расширенного использования прочитайте это: MetaClasses
Ответ 2
из Wikipedia
В объектно-ориентированном программировании metaclass - это класс, экземпляры которого являются классами. Так же, как обычный класс определяет поведение определенных объектов, метакласс определяет поведение определенных классов и их экземпляров. Не все объектно-ориентированные поддержка языков программирования метаклассы. Среди тех, кто это делает, степень, в которой метаклассы могут переопределить любой данный аспект класса поведение меняется. Каждый язык имеет собственный метаобъектный протокол, набор правила, которые определяют, как объекты, классы и метаклассы.
и
Поддержка языков и инструментов
Ниже приведены некоторые из наиболее выдающиеся языки программирования, которые поддержка метаклассов. Общий Lisp, через CLOS Groovy Objective-C Python Perl, с помощью метаклассовой прагмы, а также Moose Ruby Smalltalk Некоторые менее широко распространенные языки, которые поддерживают метаклассы включают OpenJava, OpenС++, OpenAda, CorbaScript, ObjVLisp, Object-Z, MODEL-K, XOTcl и MELDC.