Подтвердить что ты не робот

Что такое Groovy MetaClass?

Что такое использование Meta-класса в Groovy и других языках программирования OO?

4b9b3361

Ответ 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.