Java注释-对象或toString值的数组

原文 标签 java annotations coding-style

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

背景:

从字段中选择不同的值,并在组合框中列出。一些旧式值已弃用,即使它们由JDBC的SELECT DISTINCT()返回,我也不想显示它们。这就像一个小型框架,人们可以通过单击ComboBoxes中的值来构建选择查询。

我尝试了以下操作(代码无法编译-注释行是我尝试解决问题的方法):

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"},有什么建议吗?

最佳答案

But if declare JobType[] values() then I won't be able to reuse the @Exclude for other types of Enum.


不过,这是做您想要的最好的方法。这是东西:Enum类本身是没有意义的。
仅在子类化时才有意义。假设您要添加另一个过滤器,例如Color(您自己的自定义Color枚举,而不是java.awt.Color)。显然,您的过滤类所做的事情与过滤出JobType相比,过滤出Color有很大不同!
因此,最好的办法是让您尝试过滤的enum的每个不同时间都属于自己的参数,例如
public @interface Exclude {
    JobType[] jobs;
    Color[] colors;
    Foo[] foos;
    Quux[] quuxes;
}
这将完成两件事:
  • 使您可以轻松地对每种不同的过滤器类型执行不同的过滤行为。
  • 通过将不同的参数分类到不同的组中,使@Excludes批注更易读。

  • Enum.name() 的Javadoc说:

    Returns the name of this enum constant, exactly as declared in its enum declaration. Most programmers should use the toString() method in preference to this one, as the toString method may return a more user-friendly name. This method is designed primarily for use in specialized situations where correctness depends on getting the exact name, which will not vary from release to release.


    我建议您尝试告诉公司中的人员阅读Open/Closed principle并解释为什么在这种情况下违反它会特别有害。

    关于Java注释-对象或toString值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31244846/

    相关文章:

    java - 如何在MigLayout中用背景色填充跨区域?

    java - 如何在Android Oreo中获取字符串的Base64表示形式

    java - HashMap 到 Java 类对象

    ruby - Ruby 函数调用括号的主要风格是什么?

    Java 在 try-catch-finally 机制中的返回值

    java - 使用 Java 使用 Apache Flink 减少 Pojo 字段

    java - Java中的printWriter

    java - 如何使用 @Named 注释从 Spring 3.0 中的属性注入(inject)构造函数参数?

    java - 是否可以从 eclispe 中的 mysql 表中生成带有 hibernate 注释的 java 类文件

    coding-style - 用于编辑其他人模块的正确协议(protocol)