Вопрос по java, eclipse – почему этот код не компилируется с javac, но не содержит ошибок в eclipse?

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?

Самые интересные вещи. С другой стороны, я всегда думал, что Eclipse также использует javac. Спасибо за просветление :). Petr Janeček

Ваш Ответ

4   ответа
0

Похоже, вы объявляете какой-то массив ограничений. Вы ставите дополнительную запятую (,) после вашего последнего ограничения, таким образом заставляя компилятор ожидать какое-то другое значение вместе с теми, которые у вас уже есть. Попробуйте сделать это:

@Constraint(validatedBy = {
        MinTimeIntCoConstraintValidator.class, 
        MinTimeIntCoListConstraintValidator.class,
        MinTimeDoubleCoConstraintValidator.class, 
        MinTimeDoubleCoListConstraintValidator.class
        })
Error: User Rate Limit Exceeded
0

Запятая послеMinTimeDoubleCoListConstraintValidator.classJava-компилятор считает, что должно быть другое значение. Затмение принимает запятую, а Джавак нет.

Error: User Rate Limit Exceeded oshai
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededMinTimeDoubleCoListConstraintValidator.classError: User Rate Limit Exceeded
1

, в концеMinTimeDoubleCoListConstraintValidator.class, он ищет другое выражение в списке.

Error: User Rate Limit Exceededdocs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.6Error: User Rate Limit Exceededdocs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.7
Error: User Rate Limit Exceeded oshai
Error: User Rate Limit ExceededjavacError: User Rate Limit Exceeded
да, но почему нет ошибок в затмении? oshai
Error: User Rate Limit Exceeded
9

Это ошибка в Java 6javac. JLS позволяет использовать запятые в некоторых местах компилятор Eclipse следует стандарту здесь, в то время как Java 6 никогда не допускает конечных запятых.

Вы можете попробовать скомпилировать свой код сjavac с Java 7 с опциями-source 6 -target 6 (чтобы получить Java 6-совместимый байт-код). Если ошибка все еще там,подать это, Это может быть исправлено.

Error: User Rate Limit Exceeded oshai

Похожие вопросы