public void createConstructor(IClass[] argClasses, String[] argNames, KernelEnumConstructorBody mb) {

        if (ArrayUtils.isNotEmpty(argClasses) && ArrayUtils.isEmpty(argNames)) {
            argNames = new String[argClasses.length];
            for (int i = 0; i < argNames.length; i++) {
                argNames[i] = "arg" + i;
            }
        }

        if (argNames == null) {
            argNames = new String[0];
        }
        if (argClasses == null) {
            argClasses = new IClass[0];
        }

        if (argNames.length != argClasses.length) {
            throw new IllegalArgumentException("Different argument type number and argument name number");
        }

        if (argNames.length == 0) {
            existDefaultConstructor = true;
        }

        String[] enumArgNames = new String[argNames.length + 2];
        enumArgNames[0] = "@name";
        enumArgNames[1] = "@ordinal";
        System.arraycopy(argNames, 0, enumArgNames, 2, argNames.length);

        IClass[] enumArgClasses = new IClass[argClasses.length + 2];
        enumArgClasses[0] = classLoader.getType(String.class);
        enumArgClasses[1] = classLoader.getType(int.class);
        System.arraycopy(argClasses, 0, enumArgClasses, 2, argClasses.length);

        methods.add(DefaultMethodBuilder.buildForNew(ASConstants.INIT, enumArgClasses, enumArgNames, null, null,
                Opcodes.ACC_PRIVATE, mb));
    }