兩件事情:
首先,你應該總是包裝在{ }
花括號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, "");
}
但回答你的問題,有沒有一種很好的方法來最小化此代碼,因爲JSONObject
和JSONArray
都是Object
的直接子類。如果JSONArray
是JSONObject
的一個子類,它會更容易,但事實並非如此。
但如果你發現自己寫在多個地方的代碼,你應該將其解壓縮到一個函數,就像這樣:
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);
爲什麼你需要演員? ['toString'](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString())是'Object'的一種方法。 – UnholySheep
爲代碼寫一次代碼具有所述方法的所有類的祖先。 – Aziuth
@UnholySheep那麼猜這是一個壞榜樣。沒有想到這一點。 – dzaima