首页 > 解决方案 > java 复杂枚举通过引用传递给给定的方法

问题描述

好的,这就是例子。我知道可以以更好的方式满足此要求,请将其作为示例来说明需求。

Module1Messages 和 Module2Message 是枚举。目的是有一个方法 (getAllModuleMessages) 从 json 数组结构中的任何模块获取所有消息。

说了这么多,可以改进的地方是:

每个枚举中的内部 getMessagesAndCodes 都是克隆,只是对其自身枚举的引用有所不同。是否可以将其移出并唯一接收您要执行此操作的枚举?

在 getAllModuleMessages 中,枚举列表是静态的。是否可以按家庭获得清单?

我读到也许我正在寻找的是一个接口。你能在枚举的接口中介绍我吗?它会解决所有这些需求吗?

再次感谢

public enum Module1Messages{MOD1_MESSAGE_1("Message 1 for module 1", "Mensaje 1 para modulo 1");
    private Module1Messages(String msgCodeEn, String msgCodeEs){
        this.message_en=msgCodeEn;
        this.message_es=msgCodeEs;
    }
    public String getMessageEN(){return this.message_en;}
    public String getMessageES(){return this.message_es;}
    public static JSONArray getMessagesAndCodes(){
        JSONArray jArr=new JSONArray();
        for (Module1Messages curMsgCode: Module1Messages.values()){
            JSONObject jObj=new JSONObject();
            jObj.put("message_code", curMsgCode.name());
            jObj.put("English", curMsgCode.message_en);
            jObj.put("Spanish", curMsgCode.message_es);
            jArr.add(jObj);
        }
        return jArr;
    }    
    private final String message_en;
    private final String message_es;
}

    private Module2Messages(String msgCodeEn, String msgCodeEs){
        this.message_en=msgCodeEn;
        this.message_es=msgCodeEs;
    }
    public String getMessageEN(){return this.message_en;}
    public String getMessageES(){return this.message_es;}
    public static JSONArray getMessagesAndCodes(){
        JSONArray jArr=new JSONArray();
        for (Module2Messages curMsgCode: Module2Messages.values()){
            JSONObject jObj=new JSONObject();
            jObj.put("message_code", curMsgCode.name());
            jObj.put("English", curMsgCode.message_en);
            jObj.put("Spanish", curMsgCode.message_es);
            jArr.add(jObj);
        }
        return jArr;
    }        
    private final String message_en;
    private final String message_es;
}

public  JSONArray getAllModuleMessages(){
    JSONArray jArr=new JSONArray();
    jArr.add(Module1Messages.getMessagesAndCodes());
    jArr.add(Module2Messages.getMessagesAndCodes());
    return jArr;
}

标签: javaenums

解决方案


正如您所说,您的枚举可以实现接口,对于这个特定的示例,它将类似于:

public interface LanguageMessages {
  String getCode();
  String getEnglish();
  String getSpanish();
}

public enum Module1Messages implements LanguageMessages {
  ...

  getCode() { return name() }
  getEnglish() { return messageEn; } // naming conventions
  getSpanish() { return messageSp; } 
}

public enum Module2Messages implements LanguageMessages {
  ...

  getCode() { return name() }
  getEnglish() { return messageEn; } // naming conventions
  getSpanish() { return messageSp; } 
}

显然有一点重叠,但现在您可以循环遍历您的值LanguageMessages

    public static JSONArray getMessagesAndCodes(LanguageMessages[]... messages){
        JSONArray jArr=new JSONArray();        
        
        for (LanguageMessages[] currMessages: messages){
            for (LanguageMessages message : currMessages) {
                JSONObject jObj=new JSONObject();
                jObj.put("message_code", message.getCode());
                jObj.put("English", message.getEnglish());
                jObj.put("Spanish", message.getSpanish());
                jArr.add(jObj);     
            }
        }
        return jArr;
    } 

现在只需弄清楚您实际上想如何称呼它:

  • getMessagesAndCodes(Module1Messages.values(), Modul2Messages.values());
  • 或其他方式来展平列表

推荐阅读