Можно ли использовать аннотации JSR 305 с кодом, который будет работать на Android?

Можно ли использовать аннотацию JSR 305, например javax.annotation.Nonnull, в коде, который будет работать на Android? Не похоже, чтобы виртуальная машина Dalvik поддерживала пакет, и эти аннотации имеют политику хранения во время выполнения. Кто-нибудь работал с использованием пакета javax (или альтернатив, таких как использование eclipse JDT)?


person Christophe Roussy    schedule 28.02.2014    source источник


Ответы (3)


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

В вашем случае вы используете javax.annotation.Nonnull, который используется инструментами статического анализа, но обычно не действует во время выполнения. Так что да, вы можете использовать его.

Напротив, гипотетическая другая аннотация, присутствие которой имеет отношение к вашему приложению во время выполнения, должна присутствовать в пути к классам.

person barfuin    schedule 28.02.2014
comment
Я видел сбои при использовании отражения для перебора класса, использующего аннотации, недоступные во время выполнения. Это было с javax.annotation.Nullable на Android. Будьте осторожны с отражением. - person Dave Cameron; 28.10.2014

Пакет javax.* не полностью поддерживается dalvik или ADT. Однако вы можете использовать обычные аннотации. Полный список пакетов в официальной документации.

Тем не менее, все, что нацелено на файлы .class, не будет работать. Существует библиотека под названием dexmaker, которая помогает решить эту проблему.

person meredrica    schedule 28.02.2014
comment
Некоторые пакеты javax поддерживаются в соответствии с документацией, но не javax.annotation. Вы пытались использовать эти аннотации с Android? - person Christophe Roussy; 28.02.2014
comment
Да, они поддерживают EGL, XML и криптографию. - person meredrica; 28.02.2014

Почему бы не использовать androidx.annotation из стандартной платформы Android SDK?

person user1611552    schedule 28.08.2019
comment
Этот пост не выглядит попыткой ответить на этот вопрос. Ожидается, что каждый пост здесь будет явной попыткой ответить на этот вопрос; если у вас есть критика или вам нужно разъяснение вопроса или другой ответ, вы можете опубликовать комментарий (например, этот) непосредственно ниже Это. Пожалуйста, удалите этот ответ и создайте комментарий или новый вопрос. См.: Задавайте вопросы, получайте ответы, не отвлекайтесь. - person Dharman; 28.08.2019