什么是Groovy的MetaClass用于?

时间:2011-03-17 14:10:30

标签: groovy

在Groovy和其他OO编程语言中使用Meta-Class有什么用?

2 个答案:

答案 0 :(得分:37)

Java中没有Meta-Class。你可能会想到Groovy's MetaClass

  

Groovy中的MetaClass定义了   任何给定的Groovy或Java的行为   类。 MetaClass接口定义   两部分。客户端API,即   通过扩展定义   MetaObjectProtocol接口和   与Groovy运行时契约   系统。一般来说编译器和   Groovy运行时引擎与之交互   这个类的方法,而MetaClass   客户端与方法交互   由MetaObjectProtocol定义   接口


Groovy MetaClass允许您在运行时将行为和状态分配给Classes,而无需编辑原始源代码,它是原始类之上的一层。

这是Groovy用于extend the Java JDK objects的机制。

示例:

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

<强>输出:

  

轰! SomeString爆炸!
  繁荣! 12345爆炸了!

要获得更高级的用法,请阅读:MetaClasses

答案 1 :(得分:6)

来自Wikipedia

  

在面向对象的编程中,a   metaclass是一个实例的类   是班级。就像一个普通的班级   定义某些行为   对象,元类定义   某些阶级的行为及其行为   实例。并非所有面向对象   编程语言支持   元类。在那些人中,   元类可以达到的程度   覆盖类的任何给定方面   行为各不相同每种语言都有它   自己的metaobject协议,一组   管理对象的规则,   类和元类交互。

  

支持语言和工具

     

以下是最多的一些   着名的编程语言   支持元类。 Common Lisp,via   CLOS Groovy Objective-C Python Perl,   通过元类pragma,以及   Moose Ruby Smalltalk少了一些   支持的广泛语言   元类包括OpenJava,OpenC ++,   OpenAda,CorbaScript,ObjVLisp,   Object-Z,MODEL-K,XOTcl和MELDC。