在Groovy和其他OO编程语言中使用Meta-Class有什么用?
答案 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)
在面向对象的编程中,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。