【问题标题】:Can JSR 305 annotations be used with code that will run on Android?JSR 305 注释可以与将在 Android 上运行的代码一起使用吗?
【发布时间】:2014-02-28 13:46:30
【问题描述】:

可以在将在 Android 上运行的代码中使用像 javax.annotation.Nonnull 这样的 JSR 305 注释吗?看起来 Dalvik VM 不支持该软件包,并且这些注释具有运行时保留策略。有没有人使用 javax 包(或使用 eclipse JDT 之类的替代方案)让它工作?

【问题讨论】:

    标签: java android static-analysis findbugs jsr305


    【解决方案1】:

    Afaik,annotations can be missing at runtime(即使在运行时保留),这将导致注释被静默删除。因此,如果您的代码可以编译,那么即使稍后运行您的代码的 VM 不知道该注解,您也可以。

    在您的情况下,您使用的是javax.annotation.Nonnull,它由静态分析工具使用,但通常在运行时不起作用。所以是的,你可以使用它。

    相比之下,在运行时与您的应用相关的假设的其他注释必须存在于类路径中。

    【讨论】:

    • 我看到当使用反射迭代使用在运行时不可用的注释的类时崩溃。这是在 Android 上使用 javax.annotation.Nullable 的。小心反射。
    【解决方案2】:

    dalvik 或 ADT 不完全支持 javax.* 包。但是,您可以使用普通注释。完整包清单见官方docs

    也就是说,任何以 .class 文件为目标的东西都不起作用。有一个名为 dexmaker 的库可以帮助解决这个问题。

    【讨论】:

    • 根据文档支持一些 javax 包,但不支持 javax.annotation 包。您是否尝试过将这些注释与 android 一起使用?
    • 是的,他们支持 EGL、XML 和加密的东西
    【解决方案3】:

    为什么不使用 Android 标准 sdk 平台中的 androidx.annotation

    【讨论】:

    • 这篇文章看起来不像是试图回答这个问题。这里的每一篇文章都应该明确地尝试回答这个问题;如果您有批评或需要澄清问题或其他答案,您可以在其下方直接post a comment(如这个)。请删除此答案并创建评论或新问题。请参阅:Ask questions, get answers, no distractions
    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 2016-10-02
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多