元类在Groovy和其他面向对象编程语言中的用途是什么?
发布于 2011-03-17 22:13:35
您可能正在考虑Groovy's MetaClass
Groovy中的MetaClass定义了任何给定的
或MetaClass类的行为。MetaClass接口定义了两个部分。客户端API,它是通过扩展MetaObjectProtocol接口和与Groovy运行时系统的契约定义的。通常,编译器和Groovy运行时引擎与此类上的方法交互,而MetaClass客户端与MetaObjectProtocol接口定义的方法交互
Groovy允许您在运行时为类分配行为和状态,而无需编辑原始源代码,它是在原始MetaClass之上的一层。
这是Groovy用于extend the Java JDK objects的机制。
示例:
Object.class.metaClass.explode{-> println "Boom! ${delegate} Exploded!"}
"SomeString".explode();
12345.explode();
输出:
Boom!SomeString爆炸了!
砰!12345爆炸了!
有关更高级的用法,请阅读以下内容:MetaClasses
发布于 2011-03-17 22:13:11
在面向对象编程中,元类是实例是类的类。就像普通类定义某些对象的行为一样,元类定义某些类及其实例的行为。并非所有面向对象的编程语言都支持元类。在这些类中,元类可以覆盖类行为的任何给定方面的程度各不相同。每种语言都有自己的元对象协议,这是一组控制对象、类和元类如何交互的规则。
和
语言和工具中的
支持
下面是一些支持元类的最重要的编程语言。Common Lisp,通过CLOS Groovy Objective-C Python Perl,通过元类杂注,以及Moose Ruby Smalltalk一些不太流行的支持元类的语言,包括OpenJava、OpenC++、OpenAda、CorbaScript、ObjVLisp、Object-Z、MODEL-K、XOTcl和MELDC.
https://stackoverflow.com/questions/5340189
复制相似问题