在Groovy和其他面向对象编程语言中,元类(Meta-Class)的用途是什么?
你可能在想Groovy的MetaClass:
Groovy中的MetaClass定义了任何给定的Groovy或Java类的行为。MetaClass接口定义了两个部分。客户端API是通过扩展MetaObjectProtocol接口定义的,与Groovy运行时系统的契约。通常情况下,编译器和Groovy运行时引擎与此类上的方法交互,而MetaClass客户端则与MetaObjectProtocol接口定义的方法交互。
Groovy MetaClass允许你在运行时向类赋予行为和状态,而不需要编辑原始源代码,它位于原始类的上层。
这是Groovy用来扩展Java JDK对象的机制。
示例:
Object.class.metaClass.explode{-> println "Boom! ${delegate} Exploded!"}
"SomeString".explode();
12345.explode();
输出:
砰!SomeString爆炸了!
砰!12345爆炸了!
要了解更高级的用法,请阅读此文:元类
来自于维基百科
在面向对象编程中,元类是一个其实例为类的类。就像普通类定义某些对象的行为一样,元类定义某些类及其实例的行为。并非所有面向对象编程语言都支持元类。对于支持元类的语言来说,元类能够覆盖类行为的范围各不相同。每种语言都有自己的元对象协议,这是一组规则,用于管理对象、类和元类之间的交互。
以及
语言和工具的支持
以下是一些支持元类的最著名的编程语言。Common Lisp,通过CLOS Groovy Objective-C Python Perl,通过元类pragma,以及Moose Ruby Smalltalk 一些不太常见的支持元类的语言包括OpenJava,OpenC++,OpenAda,CorbaScript,ObjVLisp,Object-Z,MODEL-K,XOTcl和MELDC。