gpt4 book ai didi

java - 枚举和注解

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

我想使用编译安全形式的注解。

要将 value() 传递给 Annotation,我想使用枚举的 String 表示形式。

有没有一种方法可以将 @A 与枚举 E 中的值一起使用?

public class T {

public enum E {
a,b;
}

// C1: i want this, but it won't compile
@A(E.a)
void bar() {

// C2: no chance, it won't compile
@A(E.a.toString())
void bar2() {

}
// C3: this is ok
@A("a"+"b")
void bar3() {

}

// C4: is constant like C3, is'nt it ?
@A(""+E.a)
void bar4() {

}
}

@interface A {
String value();
}

更新

我需要@A中的String类型。

关键是我能做到

@A("" + 1)
void foo() {
}

但是编译器在这里声明“属性值必须是常量”。 E. 不是常数吗?

@A("" + E.a)
void foo() {
}

最佳答案

问题是你比编译器更聪明 :-)

E.a 是常量,但 E.a.toString() 不是。看起来应该如此,但编译器无法理解。

"a"+"b"""+ 1 起作用的原因是编译器足够聪明,可以在编译时生成常量。

当它看到 ""+ E.a 时,它使用 E.a.toString()。对 toString() 的调用足以将其关闭。

E 必须是枚举吗?你可以试试:

public final class E {
public static final String a = "a";
public static final String b = "b";
};

关于java - 枚举和注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530717/

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