6

以下代码:

@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 {};
}

在eclipse中编译但在sun/oracle编译器中编译失败:

> MinTimeValueCo.java:19: illegal start of expression
>     [javac]       })
>     [javac]       ^
>     [javac] 1 error

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

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

@Constraint(validatedBy = {
        MinTimeIntCoConstraintValidator.class, 
        MinTimeIntCoListConstraintValidator.class,
        MinTimeDoubleCoConstraintValidator.class, 
        MinTimeDoubleCoListConstraintValidator.class
        })

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

4

4 回答 4

9

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

您可以尝试使用javac带有选项的 Java 7编译您的代码-source 6 -target 6(以获得与 Java 6 兼容的字节码)。如果错误仍然存​​在,请将其归档。它可能会得到修复。

于 2012-04-30T09:16:11.820 回答
1

您在它,的末尾有一个MinTimeDoubleCoListConstraintValidator.class,正在寻找列表中的另一个表达式。

于 2012-04-30T08:52:37.243 回答
0

通过在 后面加上逗号MinTimeDoubleCoListConstraintValidator.class,java 编译器认为应该有另一个值。Eclipse 接受结尾的逗号,但 javac 不接受。

于 2012-04-30T08:52:31.920 回答
0

看起来您正在声明某种约束数组。您在最后一个约束之后放置了一个额外的逗号 ( ,),从而使编译器期望一些其他值以及您已经拥有的值。尝试这样做:

@Constraint(validatedBy = {
        MinTimeIntCoConstraintValidator.class, 
        MinTimeIntCoListConstraintValidator.class,
        MinTimeDoubleCoConstraintValidator.class, 
        MinTimeDoubleCoListConstraintValidator.class
        })
于 2012-04-30T08:53:20.270 回答