2017-04-10 33 views
1

我有一個SparseArrayDouble,我必須將它寫入包裹。寫一個SparseArray的雙重包裹

這裏是我的代碼:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    SparseArray<Double> spa = new SparseArray<>(); 
    spa.put(1, 0.8d); 
    spa.put(5, 6.4d); 
    spa.put(89, 0.8d); 
    dest.writeSparseArray(spa); 
} 

這不會編譯,與此錯誤:

writeSparseArray(android.util.SparseArray < java.lang.Object繼承 >)在 包裹不能應用於 (android.util.SparseArray <java.lang.Double>)

Android Studio中的javadoc writeSparseArray()告訴我,它使用ParcelwriteValue(),並the doc在這個方法說,它應該工作:

給定Object價值目前可能是以下類型之一: ... Double ...

現在,我要複製我SparseArrayHashMap使用putSerializable(),我知道這幾乎是對神智的侮辱。

如何有效地將我的Double SparseArray複製到包裹中?

回答

1

您只需將SparseArray<Double>更改爲SparseArray<Object>即可。

儘管DoubleObject的後代,但SparseArray<Double>不被認爲是SparseArray<Object>的後裔,這就是爲什麼會出現編譯時錯誤。

+1

非常感謝,它的工作。我想知道爲什麼簽名是'SparseArray '而不是'SparseArray <?擴展Object>'儘管... –