2017-04-09 51 views
0

我正在做一些处理JSON的事情。输入格式很灵活,所以我需要经常为不同的类执行相同的代码。有没有其他的方法可以做到这一点,我做了什么?为不同的类执行相同的功能

Object part = json.get(0); 
File saveTo = new File(dataPath("test.txt")); 
if (part.getClass() == JSONObject.class) 
    ((JSONObject)part).save(saveTo, ""); 
if (part.getClass() == JSONArray.class) 
    ((JSONArray)part).save(saveTo, ""); 
+0

为什么你需要演员? ['toString'](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString())是'Object'的一种方法。 – UnholySheep

+1

为代码写一次代码具有所述方法的所有类的祖先。 – Aziuth

+0

@UnholySheep那么猜这是一个坏榜样。没有想到这一点。 – dzaima

回答

1

两件事情:

首先,你应该总是包装在{ }花括号if语句。

Object part = json.get(0); 
File saveTo = new File(dataPath("test.txt")); 
if (part.getClass() == JSONObject.class){ 
    ((JSONObject)part).save(saveTo, ""); 
} 
if (part.getClass() == JSONArray.class){ 
    ((JSONArray)part).save(saveTo, ""); 
} 

其次,如果你只希望那些if要执行的语句之一,那么你或许应该使用else if

Object part = json.get(0); 
File saveTo = new File(dataPath("test.txt")); 
if (part.getClass() == JSONObject.class){ 
    ((JSONObject)part).save(saveTo, ""); 
} 
else if (part.getClass() == JSONArray.class){ 
    ((JSONArray)part).save(saveTo, ""); 
} 

第三,你可以使用,而不是让班里的instanceof操作:

Object part = json.get(0); 
File saveTo = new File(dataPath("test.txt")); 
if (part instanceof JSONObject){ 
    ((JSONObject)part).save(saveTo, ""); 
} 
else if (part instanceof JSONArray){ 
    ((JSONArray)part).save(saveTo, ""); 
} 

但回答你的问题,有没有一种很好的方法来最小化此代码,因为JSONObjectJSONArray都是Object的直接子类。如果JSONArrayJSONObject的一个子类,它会更容易,但事实并非如此。

但如果你发现自己写在多个地方的代码,你应该将其解压缩到一个函数,就像这样:

void saveJsonThing(Object part, File file) 
    if (part instanceof JSONObject){ 
     ((JSONObject)part).save(saveTo, ""); 
    } 
    else if (part instanceof JSONArray){ 
     ((JSONArray)part).save(saveTo, ""); 
    } 
    else{ 
     //handle error? 
    } 
} 

那么你的代码只需调用时,它需要保存一些功能:

Object part = json.get(0); 
File saveTo = new File(dataPath("test.txt")); 
saveJsonThing(part, saveTo); 
相关问题