Java注释-对象数组或toString值

Java注释-对象数组或toString值,java,annotations,coding-style,Java,Annotations,Coding Style,我需要编写注释以从结果集中排除某些值 背景: 从字段中选择不同的值,并在组合框中列出。有些遗留值已弃用,我不想显示它们,即使它们是由JDBC的SELECT DISTINCT()返回的。它就像一个小框架,人们可以通过单击组合框中的值来构建选择查询 我尝试了以下方法(代码不编译-注释行是我试图解决问题的方法): 我不喜欢使用{“S”},有什么建议吗 但是如果声明JobType[]values(),则我将无法将@Exclude重新用于其他类型的Enum 不过,这是做你想做的事情的最佳方式。事情是这样的

我需要编写注释以从结果集中排除某些值

背景:

从字段中选择不同的值,并在组合框中列出。有些遗留值已弃用,我不想显示它们,即使它们是由JDBC的
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;
    }