最近我在使用JSON格式數(shù)據(jù)時,遇到了一個很煩人的問題:treeset 的報錯。
java.lang.ClassCastException: org.json.JSONObject cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source)
當(dāng)我對JSON對象進行排序時,這個報錯就不斷地出現(xiàn)了。排查后,我發(fā)現(xiàn)這個問題是由于 TreeSet 無法比較 JSON 對象的原因造成的。
那么,如何解決這個問題呢?經(jīng)過一番查找和測試,我發(fā)現(xiàn)可以通過實現(xiàn) Comparable 接口來讓 TreeSet 對 JSON 對象進行比較。具體實現(xiàn)方法如下:
public class JSONObjectComparable implements Comparable<JSONObjectComparable>{ private JSONObject obj; public JSONObjectComparable(JSONObject obj) { this.obj = obj; } @Override public int compareTo(JSONObjectComparable o) { return obj.toString().compareTo(o.obj.toString()); } }
上述代碼中,我們對 JSONObjectComparable 類實現(xiàn)了 Comparable 接口,并通過覆寫 compareTo 方法實現(xiàn)了對 JSON 對象的比較。這樣,我們就可以將 JSON 對象封裝成 Comparable 對象,再加入 TreeSet 中進行排序了。
總的來說,這個問題的解決并不難,只需要實現(xiàn)一下 Comparable 接口就可以了。關(guān)鍵是要深入理解 TreeSet 的內(nèi)部機制,以及它與 JSON 對象之間的關(guān)系。
上一篇vue獲取e