【发布时间】:2014-11-09 23:46:50
【问题描述】:
有没有办法将一个空接口混入一个包装原始类型的 groovy 对象?我尝试的是:
interface B{}
a = new Boolean(false)
b = a.metaClass.mixin(B.class)
assert b instanceof B
错误是“groovy.lang.GroovyRuntimeException: No default constructor for class B!不能混入。”
【问题讨论】:
-
据我了解,这不是混合在 Groovy 中的工作方式。 Groovy mixin 用于将静态 category 方法附加到类。它们根本不改变类的继承结构,也不在每个实例的基础上工作。 mixin 方法查找其参数(在本例中为
B.class)的所有以调用类作为第一个参数的静态方法,并将这些方法转换为不带第一个参数的调用类的实例方法。 -
在最新版本的 Groovy 中,如果您使用
@Category注释类,则不必在类别类中使用静态方法,但无论如何它必须是具体的可实例化类。接口不行。因此有关缺少默认构造函数的错误消息。
标签: groovy metaprogramming mixins