迭代@IntDef、@StringDef或任何@Def类中的值

2023-11-25

考虑这个类:

public class MyClassOfMystery {

    public static final int NO_FLAGS = ~0;
    public static final int FIRST_FLAG = 1;
    public static final int SECOND_FLAG = 1 << 1;
    public static final int THIRD_FLAG = 1 << 2;
    public static final int FOURTH_FLAG = 1 << 3;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef(flag = true, value = {NO_FLAGS, FIRST_FLAG, SECOND_FLAG, THIRD_FLAG, FOURTH_FLAG})
    public @interface MysteryFlags { }

   ... set flags, get flags, and use flags stuff.
}

我经常创建类似的东西,并发现能够迭代所有可用的标志会很有用MysteryFlags.

我可以迭代我设置的值吗MysteryFlags?

这是我尝试过的:


这印ANNOTATION: @java.lang.annotation.Retention(value=SOURCE):

for (Annotation annotation : Flag.class.getAnnotations()) {
   Log.d(TAG, String.format("ANNOTATION: %s", String.valueOf(annotation)));
}

这导致 NPE 访问空数组

for (ExtraAction enm : Flag.class.getEnumConstants()) {
   Log.d(TAG, String.format("ENUM: %s", String.valueOf(enm)));
}

这些没有打印出任何内容:

for (Field field : Flag.class.getFields()) {
   Log.d(TAG, String.format("FIELD: %s", String.valueOf(field)));
}

and

for (Class<?> aClass : ExtraAction.class.getClasses()) {
        Log.d(TAG, String.format("CLASS: %s", String.valueOf(aClass)));
}

我知道我可以将值添加到数组中并对其进行迭代,但这需要存储另一个数组。这就是我所做的,但仍然想知道是否有更好的方法。


我认为您无法在运行时这样查询它。你的@MysterFlags注释的保留策略为SOURCE,这意味着它将被编译器丢弃。此外,@IntDef注释的保留策略为CLASS,这意味着它可以通过编译,但不会进入运行时。这就是为什么你只看到@Retention第一个循环中的注释(该注释的保留策略为RUNTIME).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迭代@IntDef、@StringDef或任何@Def类中的值 的相关文章

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • Android,对话框中的SeekBar

    我想在我的应用程序中使用带有搜索栏的对话框 但我真的不知道该怎么做 因为我缺乏 Android 经验 因此 当您按下按钮时 应该出现一个带有搜索栏的对话框 用户可以输入一个值 然后按 确定 按钮 我现在的代码是developer andro
  • Class.getResource() 返回 null

    我试图在 JPanel 上显示图片 但我不断收到错误 java lang IllegalArgumentException 输入 null 我不明白发生了什么事 这是我正在使用的代码 public void actionPerformed
  • 如何将桌面图标设置为C# Windows窗体[重复]

    这个问题在这里已经有答案了 我已经调试了 C WinForm exe 将其复制到桌面并想将其分发给其他人 如何为此 exe 设置 ico 以便桌面图标自动出现在计算机上 该计算机也会下载它 而无需进行任何调整 在 Visual Studio
  • 根据列对二维 int 数组进行排序的过程

    我之前拥有的数组以及排序后我们想要的数组 Before Box Weight Priority 1 50 5 2 30 8 3 90 6 4 20 7 5 80 9 After Box Weight Priority 3 90 6 5 80
  • 我如何知道故障转储的 CLR 版本?

    我有一个 NET 应用程序崩溃的小型转储 有没有办法使用 Windbg 或其他工具了解故障机器 生成故障转储 的 CLR 版本 例如 mscorwks dll 的版本 在 WinDbg 中 最简单的方法是使用 eeversion命令 但如果
  • Callable 基类无效?

    有人可以解释为什么继承自非参数化和参数化Callable from typing import Callable from typing import NoReturn from typing import TypeVar T TypeVa
  • 将选项传递给 chrome 驱动程序 selenium

    我正在尝试禁用 chrome 控制台的输出 如果我通过 start maximized 选项 它就可以正常工作 我可能命令错误 DesiredCapabilities capabilities DesiredCapabilities chr
  • 无法更新到 com.google.gms:google-services:4.2.0

    启动时谷歌服务版本 是classpath com google gms google services 4 1 0 但是当我将其更改为4 2 0错误发生在Sync Project with Gradle files 我的顶级等级 Top l
  • PHP:通过 Parent::method() 与 $this->method() 从子类调用方法的差异

    假设我有一个家长班 class parentClass public function myMethod echo parent myMethod was called 和下面的子班 class childClass extends par
  • pyinstaller 失败并出现错误

    我正在使用 pyinstaller 编译当前的程序 它似乎无法处理所有需要的文件 它本身运行良好 并且无需绘图也可以编译和运行 似乎无法找到文件 default schema json 我什至无法在驱动器上的任何位置找到该文件 回溯 最近一
  • 将浮点数转换为字符串

    如何在不使用库函数的情况下将 C C 中的浮点整数转换为字符串sprintf 我正在寻找一个功能 例如char ftoa float num 转换num到一个字符串并返回它 ftoa 3 1415 应该返回 3 1415 根据 Sophy
  • 从一个数据库表复制到另一个 C#

    使用 C vs2005 我需要将表从一个数据库复制到另一个数据库 两个数据库引擎都是 SQL Server 2005 对于远程数据库 源 我只有对存储过程的执行访问权限才能获取我需要在本地带来的数据 我对本地数据库有更多的控制权 因为它由需
  • 如何在 MonoTouch 中将 NSHttpCookie 转换为 System.Net.Cookie?

    我有一个 MonoTouch iPhone 应用程序 它通过 Azure 访问控制服务进行联合登录 登录是通过嵌入式 UIWebView 浏览器完成的 登录完成后 我想将 cookie 传输到我的应用程序中 我可以访问 NSHttpCook
  • 如何使用 Django 后台任务初始化重复任务?

    我正在开发一个 Django 应用程序 它从 dropbox 读取 csv 文件 解析数据并将其存储在数据库中 为此 我需要后台任务来检查文件是否被修改或更改 更新 然后更新数据库 我试过了 Celery 但无法使用 django 配置它
  • CP 求解器可以在特定点初始化吗?

    我正在使用 CP Sat 求解器来优化我正在制定的时间表 然而 现在这个问题需要很长时间才能解决 是否可以使用旧结果作为求解器的种子 作为起点 以减少找到最佳结果所需的时间 看看这个解决方案提示示例 https github com goo
  • 如何在 OSX El Capitan 上运行 Haskell

    我昨天刚刚升级到 Mac OSX El Capitan 发现我用来在终端上运行 Haskell 的方法不再起作用了 我曾经通过输入在终端上运行 Haskellcd the path where my hs file is in 然后输入gh
  • 为什么 C# 对 ushort 上的模运算发出错误“无法隐式地将 int 转换为 ushort”?

    在另一个帖子中 有人问为什么要添加两个ushort值在 C 中引发错误 例如 ushort x 4 ushort y 23 ushort z x y ERROR cannot implicitly convert int to ushort
  • Scala 解析器标记分隔符问题

    我正在尝试为下面的命令定义语法 object ParserWorkshop def main args Array String ChoiceParser todo link todo to database ChoiceParser to
  • 在 Linq 查询中调用类方法

    我有一个名为 GetAge DateTimebirthDay 的方法 我想在 Linq 查询中通过传递生日来使用此方法 并根据返回的年龄值需要执行一些逻辑 我想要以下 LINQ 格式的查询 from customer in contetx
  • 迭代@IntDef、@StringDef或任何@Def类中的值

    考虑这个类 public class MyClassOfMystery public static final int NO FLAGS 0 public static final int FIRST FLAG 1 public stati