Для чего используется MetaClass Groovy? - PullRequest
20 голосов
/ 17 марта 2011

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

Ответы [ 2 ]

37 голосов
/ 17 марта 2011

В Java нет метакласса.Вы, вероятно, думаете о MetaClass Groovy :

MetaClass в Groovy определяет поведение любого данного класса Groovy или Java.Интерфейс MetaClass определяет две части.Клиентский API, который определяется через расширенный интерфейс MetaObjectProtocol и контракт с системой времени исполнения Groovy.В общем, компилятор и Groovy runtime engine взаимодействуют с методами этого класса, в то время как клиенты MetaClass взаимодействуют с методом, определенным интерфейсом MetaObjectProtocol


Groovy MetaClass позволяет назначать поведение и состояние классам всреда выполнения без редактирования исходного исходного кода, это слой над исходным классом.

Это механизм, используемый Groovy для расширения объектов Java JDK .

Пример:

Object.class.metaClass.explode{-> println "Boom! ${delegate} Exploded!"}
"SomeString".explode();
12345.explode();

Вывод:

Бум!SomeString взорвался!
Бум!12345 взорвалось!

Для более продвинутого использования, прочитайте это: MetaClasses

6 голосов
/ 17 марта 2011

из Википедия

В объектно-ориентированном программировании метакласс - это класс, экземплярами которого являются классы.Так же, как обычный класс определяет поведение определенных объектов, метакласс определяет поведение определенных классов и их экземпляров.Не все объектно-ориентированные языки программирования поддерживают метаклассы.Среди тех, кто это делает, степень, в которой метаклассы могут переопределять любой данный аспект поведения класса, варьируется.Каждый язык имеет свой собственный протокол метаобъекта, набор правил, которые управляют взаимодействием объектов, классов и метаклассов.

и

Поддержка языков и инструментов

Ниже приведены некоторые из наиболее известных языков программирования, которые поддерживают метаклассы.Common Lisp, через CLOS Groovy Objective-C Python Perl, через прагму metaclass, а также Moose Ruby Smalltalk Некоторые менее распространенные языки, поддерживающие метаклассы, включают OpenJava, OpenC ++, OpenAda, CorbaScript, ObjVLisp, Object-Z, MODEL-K, XOTclи MELDC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...