내가 안드로이드 그루비에 대한 몇 가지 코드를 작성하려하고 내가 객체에 동적으로 속성을 추가 metaclass
를 사용할 수 없다는 사실을 우연히 발견 :안드로이드 그루비 메타 클래스
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)
와
it.mapMarker.metaClass.project = it
실패
그 이유는 클래스 MethodHandle
이 JDK 1.7에서만 추가되었다고 생각합니다.
내가 이것을 극복 할 수있는 방법을 생각해보십시오. 분명히 클래스를 확장하여 원하는 필드를 줄 수는 있지만, 아마도 Groovy의 요점이 누락되었을 것입니다.