java吧 关注:1,293,607贴子:12,826,069
  • 1回复贴,共1

这个贴吧里有没有大佬能帮忙优化一下代码?

只看楼主收藏回复

String jsonStr = "{'input':[{'userId':'1','userName':'小红'},{'userId':'2','userName':'小刘老师'}],'classType':['Student','Teacher']}";
JSONObject fileJso = JSON.parseObject(jsonStr);
JSONObject input = (JSONObject) fileJso.get("input");
List<String> typeList = (List) fileJso.get("classType");
System.out.println(typeList);
JSONObject valueJson = new JSONObject();
for(int i = 0; i < typeList.size(); i++){
String inputStr = (String) input.get(i);
Object o = new Object();
if("Student".equals(typeList.get(i))){
o = JSONObject.parseObject(inputStr, Student.class);
valueJson.put("value"+(i+1), o);
}else if("Teacher".equals(typeList.get(i))){
o = JSONObject.parseObject(inputStr, Teacher.class);
valueJson.put("value"+(i+1), o);
}
}
能不能不用 if 判断,实现这段代码的功能?
具体情况是classType不确定,可能有10多种不同的value,而且有可能比原有的 if 条件多,比如新引入一个接口和model类,原有 if 和 else if 里没有关于新的 model 的判断......
有没有办法在不修改上边这段代码的情况下对新增 model 做兼容


IP属地:北京1楼2020-01-07 11:18回复
    修改了一下json字符串
    其中classType部分变成了
    'classType':['class com.util.model.Student','class com.util.model.Teacher']
    然后循环就改成
    for(int i = 0; i < typeList.size(); i++){
    try{
    String inputStr = (String) input.get(i);
    Object o = new Object();
    Class cls = Class.forName(typeList.get(i));
    o = JSONObject.parseObject(inputStr, cls);
    valueJson.put("value"+(i+1), o);
    }catch (ClassNotFoundException ex){
    System.out.println("ClassNotFound: ["+typeList.get(i)+"]");
    }
    }
    不知道行不行?


    IP属地:北京2楼2020-01-07 15:47
    回复