2017-04-09 83 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); 
相關問題