Android アプリで JSON 文字列を逆シリアル化するために GSON を使用しています。私の問題は、期待されるオブジェクトを取得しないことですが、 LinkedTreeMap オブジェクトを取得すると、例外が発生します。
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap を sis.hierrein.android.DDL.Core.Uniqueidentifier にキャストできません
私のクラス:
public class Uniqueidentifier {
public String OID;
}
public class Element extends Uniqueidentifier {
(...)
}
逆シリアル化を実装するメソッド:
public void Set(String data) throws Exception {
HashSet<T> objList = loadObject(data);
if(objList == null) {
throw new Exception("Es wurden keine Daten übergeben.");
}
for(T obj: objList) {
// Trying to iterate over each element causes the exception
}
}
// T is in this example Element
protected HashSet<T> loadObject(String data) {
Gson parser = new Gson();
HashSet<T> obj;
Type t = new TypeToken<HashSet<T>>(){}.getType();
try {
obj = parser.fromJson(data, t);
}
catch(Exception e) {
return null;
}
return obj;
}
クラス
public class Handler<T extends Uniqueidentifier> {
(...)
}
このメソッドを含む、のスーパークラスとして使用されます
public class ElementHandler extends Handler<Element> {
(...)
}
ElementHandler 自体にはコンストラクタしか含まれていないため、スーパークラスのメソッドが呼び出されます。背景: これらのクラスはすべてインスタンス化され、メソッドはリフレクションを介して呼び出されます。