Ошибка компиляции Java в Ant: использование литералов класса в аннотациях

#java #ant #annotations #compiler-errors #javac

#java #муравей #аннотации #ошибки компилятора #javac

Вопрос:

У меня есть следующая Java-аннотация к классу (это для плагина MyBatis):

 @Intercepts({ @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = (Statement.class)) })
public class MyResultSetHandlerPlugin implements Interceptor {
    //do stuff...
}
 

Он компилируется и отлично работает в Eclipse, но при попытке запустить сценарий сборки Ant я получаю следующую ошибку:

 [javac] C:CLIP_PoCsrccomlmigamclaimsclipMyPResultSetHandlerPlugin.java:27: annotation value must be a class literal
    [javac] @Intercepts({ @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = (Statement.class)) })
    [javac]                                                                                             ^
    [javac] 1 error
 

Я попытался полностью квалифицировать классы, используемые в аннотации, но это приводит к той же ошибке. Есть мысли о том, что я делаю неправильно?

Спасибо.

Ответ №1:

Если вы пытаетесь передать массив элементов в качестве параметра аннотации, вам необходимо использовать фигурные скобки, а не круглые скобки, чтобы указать, что элемент является массивом.

 @Intercepts({ @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}) })