gpt4 book ai didi

java - 遍历@IntDef、@StringDef 或任何@Def 类中的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:29 25 4
gpt4 key购买 nike

考虑这个类:

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)。

关于java - 遍历@IntDef、@StringDef 或任何@Def 类中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com