2014-01-26 123 views
2

我是Groovy和Java的新手。我试图编译一个枚举,所以我可以在多个其他Groovy脚本中使用它。无法编译Groovy枚举

这里的枚举:

package branchformatter 

enum ColorSequence 
{ 
    COLUMNS, 
    WHEEL 
} 

当我尝试用groovyc它似乎编译没有错误,但是当我将其导入到另一个脚本,并尝试运行第二个脚本,我收到以下错误编译:

the number of constructors during runtime and compile time for branchformatter.ColorSequence do not match. Expected -1 but got 2

我试图编译使用Groovy控制台枚举,并得到了以下异常:

java.lang.InstantiationException: branchformatter.ColorSequence

奇怪的是,如果我直接将枚举定义复制并粘贴到第二个脚本中,而不是尝试导入它,则第二个脚本可以正常工作。所以这个枚举似乎没有任何根本性的错误。

我正在运行Groovy 2.2.1和Java 1.7.0_51。我试图从Freeplane 1.2.23(思维导图应用程序)中执行第二个脚本。

编辑:这是我如何使用它的第二个脚本:

import branchformatter.ColorSequence 

def colorSequence = ColorSequence.WHEEL 

if (colorSequence == ColorSequence.COLUMNS) 
{ 
    ... 
} 

EDIT 2,响应chrylis要求见反编译枚举的样子:有没有安装了JDK,只安装了JRE,看起来JDK是一个巨大的安装,所以可能需要一段时间。相反,我下载了JD-GUI,如本答案中所述:https://stackoverflow.com/a/272595/216440。下面是输出后,反编译枚举类文件:

package branchformatter; 

import groovy.lang.GroovyObject; 
import groovy.lang.MetaClass; 
import java.util.LinkedHashMap; 
import org.codehaus.groovy.runtime.BytecodeInterface8; 
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter; 
import org.codehaus.groovy.runtime.callsite.CallSite; 
import org.codehaus.groovy.transform.ImmutableASTTransformation; 

public enum ColorSequence 
    implements GroovyObject 
{ 
    public static final ColorSequence MIN_VALUE; 
    public static final ColorSequence MAX_VALUE; 

    public ColorSequence(LinkedHashMap __namedArgs) 
    { 
    MetaClass localMetaClass = $getStaticMetaClass(); 
    this.metaClass = localMetaClass; 
    if ((!BytecodeInterface8.isOrigZ()) || (BytecodeInterface8.disabledStandardMetaClass())) 
    { 
     if (ScriptBytecodeAdapter.compareEqual(__namedArgs, null)) { 
     throw ((Throwable)arrayOfCallSite[0].callConstructor(IllegalArgumentException.class, "One of the enum constants for enum branchformatter.ColorSequence was initialized with null. Please use a non-null value or define your own constructor.")); 
     } else { 
     arrayOfCallSite[1].callStatic(ImmutableASTTransformation.class, this, __namedArgs); 
     } 
    } 
    else if (ScriptBytecodeAdapter.compareEqual(__namedArgs, null)) { 
     throw ((Throwable)arrayOfCallSite[2].callConstructor(IllegalArgumentException.class, "One of the enum constants for enum branchformatter.ColorSequence was initialized with null. Please use a non-null value or define your own constructor.")); 
    } else { 
     arrayOfCallSite[3].callStatic(ImmutableASTTransformation.class, this, __namedArgs); 
    } 
    } 

    public ColorSequence() 
    { 
    this((LinkedHashMap)ScriptBytecodeAdapter.castToType(arrayOfCallSite[4].callConstructor(LinkedHashMap.class), LinkedHashMap.class)); 
    } 

    static 
    { 
    __$swapInit(); 
    long l1 = 0L; 
    __timeStamp__239_neverHappen1390713687979 = l1; 
    long l2 = 1390713687979L; 
    __timeStamp = l2; 
    Object localObject1 = $getCallSiteArray()[18].callStatic(ColorSequence.class, "COLUMNS", Integer.valueOf(0)); 
    COLUMNS = (ColorSequence)ScriptBytecodeAdapter.castToType(localObject1, ColorSequence.class); 
    Object localObject2 = $getCallSiteArray()[19].callStatic(ColorSequence.class, "WHEEL", Integer.valueOf(1)); 
    WHEEL = (ColorSequence)ScriptBytecodeAdapter.castToType(localObject2, ColorSequence.class); 
    ColorSequence localColorSequence1 = COLUMNS; 
    MIN_VALUE = localColorSequence1; 
    ColorSequence localColorSequence2 = WHEEL; 
    MAX_VALUE = localColorSequence2; 
    ColorSequence[] arrayOfColorSequence = { COLUMNS, WHEEL }; 
    $VALUES = arrayOfColorSequence; 
    } 
} 

编辑3:javap的-c -p ColorSequence的输出。请注意,输出已经被截断,因为它超过了最大长度后:

Warning: Binary file ColorSequence contains branchformatter.ColorSequence 
Compiled from "BranchFormatter.ColorSequence.groovy" 
public final class branchformatter.ColorSequence extends java.lang.Enum<branchformatter.ColorSequence> implements groovy.lang.GroovyObject { 
    public static final branchformatter.ColorSequence COLUMNS; 

    public static final branchformatter.ColorSequence WHEEL; 

    public static final branchformatter.ColorSequence MIN_VALUE; 

    public static final branchformatter.ColorSequence MAX_VALUE; 

    private static final branchformatter.ColorSequence[] $VALUES; 

    private static org.codehaus.groovy.reflection.ClassInfo $staticClassInfo; 

    public static transient boolean __$stMC; 

    private transient groovy.lang.MetaClass metaClass; 

    public static long __timeStamp; 

    public static long __timeStamp__239_neverHappen1390713687979; 

    private static java.lang.ref.SoftReference $callSiteArray; 

    public branchformatter.ColorSequence(java.lang.String, int, java.util.LinkedHashMap); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore  4 
     5: aload_0 
     6: aload_1 
     7: iload_2 
     8: invokespecial #33     // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V 
     11: aload_0 
     12: invokevirtual #37     // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass; 
     15: astore  5 
     17: aload   5 
     19: aload_0 
     20: swap 
     21: putfield  #39     // Field metaClass:Lgroovy/lang/MetaClass; 
     24: aload   5 
     26: pop 
     27: invokestatic #45     // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigZ:()Z 
     30: ifeq   42 
     33: invokestatic #48     // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z 
     36: ifne   42 
     39: goto   89 
     42: aload_3 
     43: aconst_null 
     44: invokestatic #54     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     47: ifeq   71 
     50: aload   4 
     52: ldc   #55     // int 0 
     54: aaload 
     55: ldc   #57     // class java/lang/IllegalArgumentException 
     57: ldc   #59     // String One of the enum constants for enum branchformatter.ColorSequence was initialized with null. Please use a non-null value or define your own constructor. 
     59: invokeinterface #65, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callConstructor:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     64: checkcast  #67     // class java/lang/Throwable 
     67: athrow 
     68: goto   86 
     71: aload   4 
     73: ldc   #68     // int 1 
     75: aaload 
     76: ldc   #70     // class org/codehaus/groovy/transform/ImmutableASTTransformation 
     78: aload_0 
     79: aload_3 
     80: invokeinterface #74, 4   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     85: pop 
     86: goto   133 
     89: aload_3 
     90: aconst_null 
     91: invokestatic #54     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     94: ifeq   118 
     97: aload   4 
     99: ldc   #75     // int 2 
    101: aaload 
    102: ldc   #57     // class java/lang/IllegalArgumentException 
    104: ldc   #59     // String One of the enum constants for enum branchformatter.ColorSequence was initialized with null. Please use a non-null value or define your own constructor. 
    106: invokeinterface #65, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callConstructor:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
    111: checkcast  #67     // class java/lang/Throwable 
    114: athrow 
    115: goto   133 
    118: aload   4 
    120: ldc   #76     // int 3 
    122: aaload 
    123: ldc   #70     // class org/codehaus/groovy/transform/ImmutableASTTransformation 
    125: aload_0 
    126: aload_3 
    127: invokeinterface #74, 4   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
    132: pop 
    133: return 

    public branchformatter.ColorSequence(java.lang.String, int); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_3 
     4: aload_0 
     5: aload_1 
     6: iload_2 
     7: aload_3 
     8: ldc   #84     // int 4 
     10: aaload 
     11: ldc   #86     // class java/util/LinkedHashMap 
     13: invokeinterface #89, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callConstructor:(Ljava/lang/Object;)Ljava/lang/Object; 
     18: ldc   #86     // class java/util/LinkedHashMap 
     20: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     23: checkcast  #86     // class java/util/LinkedHashMap 
     26: invokespecial #95     // Method "<init>":(Ljava/lang/String;ILjava/util/LinkedHashMap;)V 
     29: return 

    public static final branchformatter.ColorSequence[] values(); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_0 
     4: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
     7: invokevirtual #105    // Method java/lang/Object.clone:()Ljava/lang/Object; 
     10: ldc   #106    // class "[Lbranchformatter/ColorSequence;" 
     12: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     15: checkcast  #106    // class "[Lbranchformatter/ColorSequence;" 
     18: areturn 
     19: aconst_null 
     20: areturn 

    public branchformatter.ColorSequence next(); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_1 
     4: aload_1 
     5: ldc   #109    // int 5 
     7: aaload 
     8: aload_1 
     9: ldc   #110    // int 6 
     11: aaload 
     12: aload_0 
     13: invokeinterface #114, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object; 
     18: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
     23: astore_2 
     24: aload_2 
     25: pop 
     26: invokestatic #45     // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigZ:()Z 
     29: ifeq   47 
     32: getstatic  #119    // Field __$stMC:Z 
     35: ifne   47 
     38: invokestatic #48     // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z 
     41: ifne   47 
     44: goto   78 
     47: aload_2 
     48: aload_1 
     49: ldc   #120    // int 7 
     51: aaload 
     52: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
     55: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
     60: invokestatic #123    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareGreaterThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     63: ifeq   75 
     66: iconst_0 
     67: istore_3 
     68: iload_3 
     69: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     72: astore_2 
     73: iload_3 
     74: pop 
     75: goto   109 
     78: aload_2 
     79: aload_1 
     80: ldc   #130    // int 8 
     82: aaload 
     83: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
     86: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
     91: invokestatic #123    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareGreaterThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     94: ifeq   109 
     97: iconst_0 
     98: istore  4 
    100: iload   4 
    102: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
    105: astore_2 
    106: iload   4 
    108: pop 
    109: aload_1 
    110: ldc   #131    // int 9 
    112: aaload 
    113: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
    116: aload_2 
    117: invokeinterface #133, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
    122: ldc   #2     // class branchformatter/ColorSequence 
    124: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
    127: checkcast  #2     // class branchformatter/ColorSequence 
    130: areturn 
    131: aconst_null 
    132: areturn 

    public branchformatter.ColorSequence previous(); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_1 
     4: aload_1 
     5: ldc   #137    // int 10 
     7: aaload 
     8: aload_1 
     9: ldc   #138    // int 11 
     11: aaload 
     12: aload_0 
     13: invokeinterface #114, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object; 
     18: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
     23: astore_2 
     24: aload_2 
     25: pop 
     26: invokestatic #45     // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigZ:()Z 
     29: ifeq   47 
     32: getstatic  #119    // Field __$stMC:Z 
     35: ifne   47 
     38: invokestatic #48     // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z 
     41: ifne   47 
     44: goto   91 
     47: aload_2 
     48: iconst_0 
     49: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     52: invokestatic #141    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThan:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     55: ifeq   88 
     58: aload_1 
     59: ldc   #142    // int 12 
     61: aaload 
     62: aload_1 
     63: ldc   #143    // int 13 
     65: aaload 
     66: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
     69: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
     74: iconst_1 
     75: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     78: invokeinterface #133, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     83: astore_3 
     84: aload_3 
     85: astore_2 
     86: aload_3 
     87: pop 
     88: goto   135 
     91: aload_2 
     92: iconst_0 
     93: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     96: invokestatic #141    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThan:(Ljava/lang/Object;Ljava/lang/Object;)Z 
     99: ifeq   135 
    102: aload_1 
    103: ldc   #144    // int 14 
    105: aaload 
    106: aload_1 
    107: ldc   #145    // int 15 
    109: aaload 
    110: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
    113: invokeinterface #117, 2   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object; 
    118: iconst_1 
    119: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
    122: invokeinterface #133, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
    127: astore  4 
    129: aload   4 
    131: astore_2 
    132: aload   4 
    134: pop 
    135: aload_1 
    136: ldc   #146    // int 16 
    138: aaload 
    139: getstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
    142: aload_2 
    143: invokeinterface #133, 3   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
    148: ldc   #2     // class branchformatter/ColorSequence 
    150: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
    153: checkcast  #2     // class branchformatter/ColorSequence 
    156: areturn 
    157: aconst_null 
    158: areturn 

    public static branchformatter.ColorSequence valueOf(java.lang.String); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_1 
     4: aload_1 
     5: ldc   #148    // int 17 
     7: aaload 
     8: ldc   #2     // class branchformatter/ColorSequence 
     10: ldc   #2     // class branchformatter/ColorSequence 
     12: aload_0 
     13: invokeinterface #74, 4   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     18: ldc   #2     // class branchformatter/ColorSequence 
     20: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     23: checkcast  #2     // class branchformatter/ColorSequence 
     26: areturn 
     27: aconst_null 
     28: areturn 

    public static final branchformatter.ColorSequence $INIT(java.lang.Object...); 
    Code: 
     0: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     3: astore_1 
     4: iconst_0 
     5: anewarray  #101    // class java/lang/Object 
     8: iconst_1 
     9: anewarray  #101    // class java/lang/Object 
     12: dup 
     13: iconst_0 
     14: aload_0 
     15: aastore 
     16: iconst_1 
     17: newarray  int 
     19: dup 
     20: iconst_0 
     21: iconst_0 
     22: iastore 
     23: invokestatic #155    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.despreadList:([Ljava/lang/Object;[Ljava/lang/Object;[I)[Ljava/lang/Object; 
     26: dup 
     27: bipush  -1 
     29: ldc   #2     // class branchformatter/ColorSequence 
     31: invokestatic #159    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.selectConstructorAndTransformArguments:([Ljava/lang/Object;ILjava/lang/Class;)I 
     34: new   #2     // class branchformatter/ColorSequence 
     37: swap 
     38: lookupswitch { // 2 
      -1348271900: 64 
      -242181752: 93 
       default: 134 
      } 
     64: dup_x1 
     65: dup2_x1 
     66: pop 
     67: dup 
     68: iconst_0 
     69: aaload 
     70: ldc   #161    // class java/lang/String 
     72: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     75: checkcast  #161    // class java/lang/String 
     78: swap 
     79: dup 
     80: iconst_1 
     81: aaload 
     82: invokestatic #167    // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I 
     85: swap 
     86: pop 
     87: invokespecial #168    // Method "<init>":(Ljava/lang/String;I)V 
     90: goto   144 
     93: dup_x1 
     94: dup2_x1 
     95: pop 
     96: dup 
     97: iconst_0 
     98: aaload 
     99: ldc   #161    // class java/lang/String 
    101: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
    104: checkcast  #161    // class java/lang/String 
    107: swap 
    108: dup 
    109: iconst_1 
    110: aaload 
    111: invokestatic #167    // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I 
    114: swap 
    115: dup 
    116: iconst_2 
    117: aaload 
    118: ldc   #86     // class java/util/LinkedHashMap 
    120: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
    123: checkcast  #86     // class java/util/LinkedHashMap 
    126: swap 
    127: pop 
    128: invokespecial #95     // Method "<init>":(Ljava/lang/String;ILjava/util/LinkedHashMap;)V 
    131: goto   144 
    134: new   #57     // class java/lang/IllegalArgumentException 
    137: dup 
    138: ldc   #170    // String This class has been compiled with a super class which is binary incompatible with the current super class found on classpath. You should recompile this class with the new version. 
    140: invokespecial #173    // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V 
    143: athrow 
    144: swap 
    145: pop 
    146: areturn 
    147: aconst_null 
    148: areturn 

    static {}; 
    Code: 
     0: invokestatic #180    // Method __$swapInit:()V 
     3: lconst_0 
     4: lstore_0 
     5: lload_0 
     6: putstatic  #182    // Field __timeStamp__239_neverHappen1390713687979:J 
     9: lload_0 
     10: pop2 
     11: ldc2_w  #183    // long 1390713687979l 
     14: lstore_2 
     15: lload_2 
     16: putstatic  #186    // Field __timeStamp:J 
     19: lload_2 
     20: pop2 
     21: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     24: ldc   #187    // int 18 
     26: aaload 
     27: ldc   #2     // class branchformatter/ColorSequence 
     29: ldc   #188    // String COLUMNS 
     31: iconst_0 
     32: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     35: invokeinterface #74, 4   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     40: astore  4 
     42: aload   4 
     44: ldc   #2     // class branchformatter/ColorSequence 
     46: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     49: checkcast  #2     // class branchformatter/ColorSequence 
     52: putstatic  #190    // Field COLUMNS:Lbranchformatter/ColorSequence; 
     55: aload   4 
     57: pop 
     58: invokestatic #30     // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 
     61: ldc   #191    // int 19 
     63: aaload 
     64: ldc   #2     // class branchformatter/ColorSequence 
     66: ldc   #192    // String WHEEL 
     68: iconst_1 
     69: invokestatic #129    // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     72: invokeinterface #74, 4   // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
     77: astore  5 
     79: aload   5 
     81: ldc   #2     // class branchformatter/ColorSequence 
     83: invokestatic #93     // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
     86: checkcast  #2     // class branchformatter/ColorSequence 
     89: putstatic  #194    // Field WHEEL:Lbranchformatter/ColorSequence; 
     92: aload   5 
     94: pop 
     95: getstatic  #190    // Field COLUMNS:Lbranchformatter/ColorSequence; 
     98: astore  6 
    100: aload   6 
    102: putstatic  #196    // Field MIN_VALUE:Lbranchformatter/ColorSequence; 
    105: aload   6 
    107: pop 
    108: getstatic  #194    // Field WHEEL:Lbranchformatter/ColorSequence; 
    111: astore  7 
    113: aload   7 
    115: putstatic  #198    // Field MAX_VALUE:Lbranchformatter/ColorSequence; 
    118: aload   7 
    120: pop 
    121: iconst_2 
    122: anewarray  #2     // class branchformatter/ColorSequence 
    125: dup 
    126: iconst_0 
    127: getstatic  #190    // Field COLUMNS:Lbranchformatter/ColorSequence; 
    130: aastore 
    131: dup 
    132: iconst_1 
    133: getstatic  #194    // Field WHEEL:Lbranchformatter/ColorSequence; 
    136: aastore 
    137: astore  8 
    139: aload   8 
    141: putstatic  #99     // Field $VALUES:[Lbranchformatter/ColorSequence; 
    144: aload   8 
    146: pop 
    147: return 

    protected groovy.lang.MetaClass $getStaticMetaClass(); 
    Code: 
     0: aload_0 
     1: invokevirtual #202    // Method java/lang/Object.getClass:()Ljava/lang/Class; 
     4: ldc   #2     // class branchformatter/ColorSequence 
     6: if_acmpeq  14 
     9: aload_0 
     10: invokestatic #206    // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass; 
     13: areturn 
     14: getstatic  #208    // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo; 
     17: astore_1 
     18: aload_1 
     19: ifnonnull  34 
     22: aload_0 
     23: invokevirtual #202    // Method java/lang/Object.getClass:()Ljava/lang/Class; 
     26: invokestatic #214    // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo; 
     29: dup 
     30: astore_1 
     31: putstatic  #208    // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo; 
     34: aload_1 
     35: invokevirtual #217    // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass; 
     38: areturn 

    public groovy.lang.MetaClass getMetaClass(); 
    Code: 
     0: aload_0 
     1: getfield  #39     // Field metaClass:Lgroovy/lang/MetaClass; 
     4: dup 
     5: ifnull  9 
     8: areturn 
     9: pop 
     10: aload_0 
     11: dup 
     12: invokevirtual #37     // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass; 
     15: putfield  #39     // Field metaClass:Lgroovy/lang/MetaClass; 
     18: aload_0 
     19: getfield  #39     // Field metaClass:Lgroovy/lang/MetaClass; 
     22: areturn 

    public void setMetaClass(groovy.lang.MetaClass); 
    Code: 
     0: aload_0 
     1: aload_1 
     2: putfield  #39     // Field metaClass:Lgroovy/lang/MetaClass; 
     5: return 

[[REMAINDER TRUNCATED]] 
+1

你可以发布'javap -c -p ColorSequence'的输出吗? – chrylis

+1

如果这种反编译是准确的(反汇编仍然更有用),它看起来像'groovyc'处理枚举的一个主要错误。 Java枚举特别不应该具有公共构造函数(有几个特定的​​实例)。下一步我会试着编译你的Java枚举(因为你没有涉及任何行为),并在Groovy中使用它。 – chrylis

+0

@chrylis:谢谢。已经下载了JDK和Eclipse,并试图去掌握它。我会尝试在枚举类文件上使用javap,但将Java编译为Groovy枚举的想法可能是解决方案。下班后必须尝试一下(一旦我已经想出如何使用Eclipse)。 –

回答

2

这看起来对我来说,它是通过在Groovy和/或Java的版本的差异造成的。我认为这个问题很可能是由于你正在使用groovyc 2.2.1来编译它,而Freeplane试图用它自己的内部groovy库来运行它,这个库可能是不同的版本。

http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Update_Freeplane%27s_Groovy_version

这表示Freeplane带有常规1.8.0。我会尝试更新Freeplane以使用groovy 2.2.1,否则会自行回到1.8.0,看看是否能解决这个问题。

两件事情就像一般注意事项: 首先:任何时候当你看到'错误的构造函数数'或'不兼容的类改变'错误时,通常表明存在java和/或常规版本问题。根据我的经验,这将成为问题中的9次。

第二件事是非常基本的,如果你有java/groovy的经验,但我会提及它,因为你说你是新手。如果您正在运行Groovy脚本,则不需要预编译它。 Groovy shell在评估脚本时会为你做这件事。然后你会一直确定它是用与它运行的相同版本的groovy编译的。

+0

工作完美,谢谢。一个问题:当你说你不需要预编译一个你想运行的脚本时,它是否包含被导入到其他脚本中的脚本?我一直在玩耍,如果我用原始的定义枚举的groovy脚本替换已编译枚举的类文件,导入它的脚本运行正常。但是如果我在定义它的脚本和导入脚本的脚本中重命名枚举,它会失败,并显示“无法解析类_新名称_”。所以我不确定是否需要编译导入其他脚本的脚本。 –

+1

如果这是你想要作为一次性脚本运行的东西,最好的选择通常是将所有需要的类作为静态内部类包含在一个脚本中。如果您希望脚本依赖于另一个库或其他库中的预编译代码,则必须在运行时将这些jar文件添加到类路径中(因为您无法轻松地将正常的依赖关系添加到第三方程序)。你可以通过调用: 'this.class.classLoader.addURL()' 问题,那么你将不得不通过调用Class.forName(String)来加载类,这是一个痛苦。内部阶层更好。 – allTwentyQuestions

+0

感谢您的解释。我想我只是习惯于Python,它很容易将类和函数拆分为不同的文件,而无需编译它们或任何东西。 Groovy对于小型项目有好处,但它看起来像是复杂的,它是大型项目的脚本语言和Java之间的一半。 –