Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为多个if-else语句编写函数_Java_Function_If Statement - Fatal编程技术网

Java 如何为多个if-else语句编写函数

Java 如何为多个if-else语句编写函数,java,function,if-statement,Java,Function,If Statement,我是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

我是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语句。我不知道如何优化代码。

我认为最好使用以下符号:


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

我可以编写如下函数:

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");

对于类的所有直接字段,可以使用反射,如果需要,可以对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);
}

您需要注意这一点-有许多重复的键,您需要确保您在所有位置page1和city中都进行了更改-很容易发生复制/粘贴错误。如果您不需要多次指定,可能会更好。是的,我同意您的解决方案在可读性和可维护性方面都更好。@EvangelineLydia不客气。如果另一个答案更适合你,你可以通过接受这个或另一个答案来表达你的感激之情,使用左边的勾号。
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);
}