【发布时间】:2015-07-06 11:36:03
【问题描述】:
我需要编写一个注释来从结果集中排除某些值。
背景:
从字段中选择不同的值并在组合框中列出。一些遗留值已被弃用,我不想展示它们,即使它们是由 JDBC 的 SELECT DISTINCT() 返回的。它就像一个迷你框架,人们可以通过单击 ComboBox 中的值来构建选择查询。
我尝试了以下方法(代码无法编译 - 注释行是我尝试解决问题的方法):
public enum JobType {
//...
S,
//...
}
public @interface Exclude {
Object[] values(); // Invalid type
Enum[] values(); // Invalid type again
String[] values(); // Accepts but see the following lines
}
@Table(name = "jobs_view")
public class JobSelectionView extends View {
//...
@Exclude(values = {JobType.S.toString()}) // Not a constant expression
@Exclude(values = {JobType.S.name()}) // Not a constant expression ?!?!?!
@Exclude(values = {"S"}) // Works but... come on!
@Enumerated(value = EnumType.STRING)
@Column(name = "type")
private JobType type;
//...
}
我不喜欢使用{"S"},有什么建议吗?
【问题讨论】:
-
您必须使用编译时间常数。这意味着 没有 方法。您可以使用
JobType[]。 -
但是如果声明 JobType[] values() 那么我将无法将 @Exclude 重用于其他类型的枚举。
-
你可以使用
public static final常量。 -
我试图用“public static final String S = JobType.S.name();”来欺骗 Java但它比这更聪明。 :-(
标签: java annotations coding-style