java - 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;
}
解决方案
正如您所说,您的枚举可以实现接口,对于这个特定的示例,它将类似于:
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());
- 或其他方式来展平列表
推荐阅读
- spring-cloud-dataflow - Spring Cloud Dataflow 任务执行在后续运行中失败
- javascript - 导出/要求不适用于 Node.JS 文件
- web-scraping - 错误:页面崩溃!在 Page._onTargetCrashed PUPPETEER
- javascript - 如果它们具有相同的键,我如何合并对象值?
- xamarin - 如何使用 Xamarin.Essentials WebAuthenticator 中的 access_token?
- linux - 美元有什么好处?在 bash
- ruby-on-rails - 从 Rails 6 应用程序中完全删除 /assets 目录
- c++ - 如何在 luabind (lua, c++) 中使用 boost::any 类型?
- java - 尝试在 Burp 中导入插件时出现 ClassNotFoundException
- python - 执行用户告诉它不工作的次数的程序