【问题标题】:how to write function for multiple if-else statements如何为多个 if-else 语句编写函数
【发布时间】:2016-02-15 09:50:01
【问题描述】:

我是 Java 新手。我有很多多个 if-else 语句。出于代码优化目的,我需要为所有 if else 逻辑编写一个函数。

if (obj.getJSONObject("page_1").has("city")) {
    sn.city = (String) obj.getJSONObject("page_1").get("city").toString();
} else {
    sn.city = null;
}

// param 2 - locality

if (obj.getJSONObject("page_1").has("locality")) {
    locality = (String) obj.getJSONObject("page_1").get("locality").toString();
} else {
    locality = null;
}

我有 110 个 if -else 语句。我不知道如何优化代码。

【问题讨论】:

    标签: java function if-statement


    【解决方案1】:

    我可能会写一个类似的函数:

    static String getToStringOrNull(JSONObject parent, String key) {
      return parent.has(key) ? parent.get(key).toString() : null;
    }
    

    你可以这样称呼它

    sn.city = getToStringOrNull(obj.getJSONObject("page_1"), "city");
    locality = getToStringOrNull(obj.getJSONObject("page_1"), "locality");
    

    【讨论】:

    • @EvangelineLydia 不客气。您可以通过使用左侧的勾号接受这个(或另一个答案,如果另一个更适合您)来表达您的感激之情。
    【解决方案2】:

    我认为最好的用法是这种表示法 (ternary operator):

    sn.city = (obj.getJSONObject("page_1").has("city")) ? 
                        (String) obj.getJSONObject("page_1").get("city").toString() : null;
    

    ? 之前的部分代表 if 语句,如果条件满足则为第二部分,否则为最后一部分。

    【讨论】:

    • 您需要注意这一点 - 您需要确保在所有地方都更改了许多重复键("page1""city") - 这很容易制作复制/粘贴错误。如果您不需要多次指定它们可能会更好。
    • 是的,我同意您的解决方案在可读性和可维护性方面都更好。
    【解决方案3】:

    对于你类的所有直接字段,你可以使用反射(如果你愿意,你可以对 sn 对象做同样的工作):

    Class aClass = this.getClass();
    
    Field[] fields = aClass.getFields();
    
    for (Field field : fields) {
    
    
       String value = (obj.getJSONObject("page_1").has(field.getName())) ?
                (String) obj.getJSONObject("page_1").get(field.getName()).toString() : null;
    
       field.set(this, value);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多