java 通过引用传递给定方法的复杂枚举
java complex enum pass by reference to a given method
好的,这就是例子。我知道可以用更好的方式满足此要求,请将其作为示例来说明需求。
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());
- 或其他一些使列表变平的方法
好的,这就是例子。我知道可以用更好的方式满足此要求,请将其作为示例来说明需求。
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());
- 或其他一些使列表变平的方法