获取类的所有静态变量而不进行反射

时间:2015-04-15 12:34:33

标签: java

我们有一个A类异常,其中一些故障代码定义为public static final,它在我们的源代码中被许多文件(超过100个)引用。 我们想要B类中的所有这些故障代码进行一些处理。

目前,我们在A类中实现了一个名为getFaultCodes()的方法来构建故障代码列表并返回相同的代码。这种方法的问题在于,无论何时引入故障代码,都必须在getFaultCode方法中添加。这很容易出错,因为用户可能忘记将新代码添加到方法中。

enum下移动这些错误代码需要更改源代码中的许多文件,因此我们不希望这样做。

class ExceptionA  {
   public static final String faultCode1 = "CODE1";
   public static final String faultCode2 = "CODE1";
   public static final String faultCode3 = "CODE1";

   List<String> getFaultCodes(){
         list.add(faultCode1);
         ......
         return list;
   }
}

我们正在考虑使用反射,但我在这个论坛上发帖只是为了检查是否有更好的解决方案。请提供解决此问题的建议。

2 个答案:

答案 0 :(得分:6)

也许你可以通过一个界面:

public interface FaultCodeProvider
{
    String getFaultCode();
}

然后让你的枚举实现它:

public enum DefaultFaultCodes
    implements FaultCodeProvider
{
    FAULT1("text for fault 1"),
    // etc
    ;

    private final String value;

    DefaultFaultCodes(final String value)
    {
        this.value = value;
    }

    @Override
    public String getFaultCode()
    {
        return value;
    }
}

从枚举中收集它们就像在枚举values()中循环一样简单。

答案 1 :(得分:0)

我修改了以下代码:

class ExceptionA  {

   public enum codes {
        CODE1("CODE1"),
        CODE2("CODE2"),
        CODE3("CODE3"),

       private String code;

      codes(String code){
          this.code = code;
      }

      public String getCode() {
          return this.code;
      }  
   }
   public static final String faultCode1 = code.CODE1;
   public static final String faultCode2 = code.CODE2;
   public static final String faultCode3 = code.CODE3;

}

这样我就不需要改变变量的出现次数&#34; faultCode&#34;在源代码中,我可以访问其他类的故障代码列表。