当前位置: 首页 > 面试题库 >

遍历@ IntDef,@ StringDef或任何@Def类中的值

柴星津
2023-03-14
问题内容

考虑此类:

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)));
}

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

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


问题答案:

我认为您无法在运行时像这样查询它。您的@MysterFlags注释的保留策略为SOURCE,这意味着它将被编译器丢弃。此外,@IntDef注释的保留策略为CLASS,这意味着它可以通过编译来实现,但不会在运行时使用。因此,您只会@Retention在第一个循环中看到注释(注释的保留策略为RUNTIME)。



 类似资料:
  • 问题内容: 是否有函数可以在numpy数组的任意维度上获得迭代器? 在第一维上迭代很容易… 但是,要遍历其他维度很难。例如,最后一个维度: 我正在自己生成一个发生器来执行此操作,但令我惊讶的是,没有像numpy.ndarray.iterdim(axis = 0)这样的函数可以自动执行此操作。 问题答案: 您提出的建议相当快,但是可以通过以下更清晰的形式来提高可读性: 或者更好(更快,更通用,更明确

  • 问题内容: 我想遍历一个对象,并在每次迭代时将文件路径数组传递给gulp.src,然后对这些文件进行一些处理。下面的代码仅用于说明目的,因为return语句会在第一次通过时终止循环,因此实际上将无法工作。 这是基本思想。有关如何执行此操作的任何想法? 问题答案: 我能够使用合并流实现这一目标。如果有人感兴趣,这里是代码。这个想法是在循环内创建一个流数组,并在完成迭代后合并它们:

  • 问题内容: 我知道我们可以做这样的事情: 读取打包在我们jar文件中的文件。 我已经用谷歌搜索了很多,我肯定没有使用适当的术语;我要做的是列出可用资源,如下所示: 那应该返回包内的资源列表 那可能吗?关于如何做的任何想法,以防无法像我展示的那样容易地完成? 注意:我知道有可能知​​道您的罐子在哪里,然后将其打开并检查其内容以达到目的。但是,我无法在现在工作的环境中做到这一点。 问题答案: 对于JA

  • 问题内容: 我有一个Map如下所示的bean: 这ftqSet适合以下数据结构: 在我的测试JSP文件中,我一直在尝试使用来访问数据 : 但是它没有输出${f.feedId}。为什么会这样呢?我将如何访问该结构的各个元素,以便创建一个漂亮的表? 问题答案: 的每次迭代中给出了一个实例,它反过来又和getValue()方法。这与在普通Java中进行操作类似。 例如 在的情况下, 的回报, ,所以你需

  • 问题内容: 我有一个如下的JavaScript对象: 现在我想通过所有回路元素(,,…),并得到他们的键和值。我怎样才能做到这一点? 我可以根据需要修改JavaScript对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用。 问题答案: 您可以使用其他人所示的循环。但是,您还必须确保获得的键是对象的实际属性,而不是来自原型。 这是代码段: 用Object.keys()替代: 请注意,使

  • 问题内容: 考虑到这一节课;我将如何迭代其中包含的方法? 我尝试过的以下操作均未成功: 问题答案: 您可以在原型上使用Object.getOwnPropertyNames: