Java注释-对象数组或toString值
我需要编写注释以从结果集中排除某些值 背景: 从字段中选择不同的值,并在组合框中列出。有些遗留值已弃用,我不想显示它们,即使它们是由JDBC的Java注释-对象数组或toString值,java,annotations,coding-style,Java,Annotations,Coding Style,我需要编写注释以从结果集中排除某些值 背景: 从字段中选择不同的值,并在组合框中列出。有些遗留值已弃用,我不想显示它们,即使它们是由JDBC的SELECT DISTINCT()返回的。它就像一个小框架,人们可以通过单击组合框中的值来构建选择查询 我尝试了以下方法(代码不编译-注释行是我试图解决问题的方法): 我不喜欢使用{“S”},有什么建议吗 但是如果声明JobType[]values(),则我将无法将@Exclude重新用于其他类型的Enum 不过,这是做你想做的事情的最佳方式。事情是这样的
SELECT DISTINCT()
返回的。它就像一个小框架,人们可以通过单击组合框中的值来构建选择查询
我尝试了以下方法(代码不编译-注释行是我试图解决问题的方法):
我不喜欢使用{“S”}
,有什么建议吗
但是如果声明JobType[]values()
,则我将无法将@Exclude
重新用于其他类型的Enum
不过,这是做你想做的事情的最佳方式。事情是这样的:
类Enum
本身没有意义。
它只有在子类化时才有意义。假设您想添加另一个过滤器,比如说Color
(您自己的自定义Color
enum,而不是java.awt.Color
)。显然,过滤类所做的事情对于过滤出JobType
与过滤出Color
非常不同
因此,最好的做法是让您尝试在自己的参数中过滤的enum
的每个不同时间,例如
public @interface Exclude {
JobType[] jobs;
Color[] colors;
Foo[] foos;
Quux[] quuxes;
}
这将完成两件事:
@Excludes
注释更清晰Javadoc for说: 返回此
enum
常量的名称,与其enum
声明中声明的名称完全相同。大多数程序员应该优先使用toString()
方法,因为toString
方法可能会返回一个更加用户友好的名称此方法主要用于特殊情况,正确性取决于获得确切的名称,不同版本的名称不会有所不同。
我建议您试着告诉公司的员工仔细阅读,并解释为什么在这种情况下违反它会特别有害。您必须使用编译时常量。这意味着没有办法。您可以使用
JobType[]
。但是如果声明JobType[]值(),则我将无法对其他类型的枚举重复使用@Exclude。可能重复:您可以使用public static final
常量。我试图用“public static final String S=JobType.S.name();”欺骗Java但它比这更聪明-(对我来说,重要的是如果有人用IDE重构枚举成员(或其名称),那么最后的字符串将不包含正确的名称()-s、 但是使用您的解决方案,这不会发生。谢谢您的回答!@AdamHorvath Javadoc特别声明,他们认为人们不太可能重命名枚举常量…请参见。也就是说,如果您对此感到担心,您可以使用toString()
而不是name()
,当然这也有其自身的风险。没错,有一个合理的应用程序。但在我们“疯狂”的公司,我们广泛使用枚举。toString()的变化更频繁,因为我们给它附加了人类可读的名称;就像JobType一样。S.toString()是“示例”。如果您在列上指定EnumType.STRING,则它在某种程度上是可管理的。您可以要求所有枚举实现接口ImmutableName{STRING ImmutableName();}
这保证不会在IDE重构时更改…但是没有办法强制人们实现接口,也不能真正保证immutableName
不会更改。我现在正在编辑我的答案。
public @interface Exclude {
JobType[] jobs;
Color[] colors;
Foo[] foos;
Quux[] quuxes;
}