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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам