以下代码可以正常工作,其中PROCESS_UPDATES是常量。
public static final String PROCESS_UPDATES = "ProcessUpdates";
public static final String PROCESS_UPDATES = "ProcessSnapshots";
// etc....
@Produce(uri = "seda:" + MyClass.PROCESS_UPDATES)
protected ProducerTemplate processUpdatesTemplate;
然而为了避免整个地方有十亿个常量字符串,我正在尝试枚举设计模式。
public enum Route { ProcessUpdates, ProcessSnapshots }
在大多数情况下,我可以写"seda:" + Route.ProcessSnapshots
,它看起来更整洁。
然而,我可靠的测试代码现在失败了,因为注释中的uri必须是常量。
@Produce(uri = "seda:" + MyClass.Route.ProcessUpdates) // compiler error
protected ProducerTemplate processUpdatesTemplate;
错误:Attribute value must be constant
。
问题是,Route.ProcessUpdates.toString()
种“是”常量,但编译器不会这样看。
我读了about constants and annotations,但我没有看到任何答案。
那么有一种很好的方法可以在java中的编译时从枚举构造一个常量String吗?
感谢您的任何提示。 vikingsteve
答案 0 :(得分:3)
我没有找到解决方案。
据我所见,这是不可能的。
我需要使用字符串常量... public static final String XYZ = "Xyz";
- 等等。
答案 1 :(得分:0)
“计算机科学中的所有问题都可以通过另一种间接解决方案来解决” --- David Wheeler
这里是:
枚举类:
public enum Gender {
MALE(Constants.MALE_VALUE), FEMALE(Constants.FEMALE_VALUE);
Gender(String genderString) {
}
public static class Constants {
public static final String MALE_VALUE = "MALE";
public static final String FEMALE_VALUE = "FEMALE";
}
}
人员班:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = Person.GENDER)
@JsonSubTypes({
@JsonSubTypes.Type(value = Woman.class, name = Gender.Constants.FEMALE_VALUE),
@JsonSubTypes.Type(value = Man.class, name = Gender.Constants.MALE_VALUE)
})
public abstract class Person {
...
}