【发布时间】:2015-01-18 14:16:43
【问题描述】:
我正在尝试在 Groovy for Android 上编写一些代码,但我偶然发现了一个事实,即我无法使用 metaclass 将属性动态添加到对象:
it.mapMarker.metaClass.project = it
它失败了
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/invoke/MethodHandles;
at org.codehaus.groovy.vmplugin.v7.IndyInterface.<clinit>(IndyInterface.java:81)
at org.codehaus.groovy.vmplugin.v7.Java7.invalidateCallSites(Java7.java:31)
at org.codehaus.groovy.reflection.ClassInfo.incVersion(ClassInfo.java:87)
at groovy.lang.MetaClassImpl.incVersion(MetaClassImpl.java:3445)
at groovy.lang.ExpandoMetaClass.performRegistryCallbacks(ExpandoMetaClass.java:931)
at groovy.lang.ExpandoMetaClass.access$400(ExpandoMetaClass.java:254)
at groovy.lang.ExpandoMetaClass$2.call(ExpandoMetaClass.java:860)
at groovy.lang.ExpandoMetaClass.performOperationOnMetaClass(ExpandoMetaClass.java:813)
at groovy.lang.ExpandoMetaClass.registerBeanProperty(ExpandoMetaClass.java:842)
at groovy.lang.ExpandoMetaClass.setProperty(ExpandoMetaClass.java:791)
at org.codehaus.groovy.runtime.HandleMetaClass.setProperty(HandleMetaClass.java:91)
at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:191)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:480)
我猜是因为 MethodHandle 这个类只在 JDK 1.7 中加入。
你能想出我能克服这个问题的方法吗?当然我可以扩展一个类并给它想要的字段,但是,嘿,这可能错过了 Groovy 的重点。
【问题讨论】: