为什么这段代码没有用javac编译但在eclipse中没有错误?

osh*_*hai 6 java eclipse compiler-construction javac

以下代码:

@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Constraint(validatedBy = {
        MinTimeIntCoConstraintValidator.class, 
        MinTimeIntCoListConstraintValidator.class,
        MinTimeDoubleCoConstraintValidator.class, 
        MinTimeDoubleCoListConstraintValidator.class,
        })
@Documented
public @interface MinTimeValueCo
{
    int value();
    String message() default "value does not match minimum requirements";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)

在eclipse中编译但无法在sun/oracle编译器中编译:

> MinTimeValueCo.java:19: illegal start of expression
>     [javac]       })
>     [javac]       ^
>     [javac] 1 error
Run Code Online (Sandbox Code Playgroud)

这是因为之后的逗号MinTimeDoubleCoListConstraintValidator.class,.

当我删除逗号时它工作正常:

@Constraint(validatedBy = {
        MinTimeIntCoConstraintValidator.class, 
        MinTimeIntCoListConstraintValidator.class,
        MinTimeDoubleCoConstraintValidator.class, 
        MinTimeDoubleCoListConstraintValidator.class
        })
Run Code Online (Sandbox Code Playgroud)

我使用的是jdk 1.6.0.10.
你知道为什么这是非法的并且在eclipse中编译吗?

Aar*_*lla 9

这是Java 6中的一个错误javac.JLS允许在某些地方使用尾随逗号,Eclipse编译器遵循此处的标准,而Java 6从不允许在任何地方使用尾随逗号.

您可以尝试使用javacJava 7 编译代码-source 6 -target 6(使Java 6兼容字节代码).如果错误仍然存​​在,请提交.它可能会得到修复.