gpt4 book ai didi

android - GSON可以处理静态私有(private)嵌套类吗

转载 作者:行者123 更新时间:2023-11-29 01:41:04 24 4
gpt4 key购买 nike

我正在使用一种设计,其中父类具有 private static nested classSparseArray。现在,如果我尝试使用 GSON 库对父对象进行 jsonify,它是否能够对我的父类对象进行 jsonify 和 de-jsonify,因为嵌套类实际上在外部不可见。代码看起来像这样。

class A {
private SparseArray<B> array = new SparseArray<B>();

private A() {}

private static class B {
private B() {}
int example;
}
// static public accessors to access some methods of class A, no object of A outside A
}

另一方面,我不希望任何人在外部创建父类的对象,因此我将我的默认构造函数保密。我想知道 GSON 在我的代码场景中是否会正常执行。

在我将其转换为 JSON 之后,SparseList 中的对象似乎被转换为 null 而不是 jsonified 对象。

最佳答案

通过使用这个测试类找到了答案,结果是 GSON 与每个可见性修饰符无缝协作,无论它是类、方法、实例变量或构造函数的公共(public)还是私有(private)。我得到的错误是由于使用了 SparseArray 并且如果它被替换为 HashMap 如下它就像黄油一样工作。

package in.mubble.mubbletest;

import java.util.HashMap;

import android.annotation.SuppressLint;
import android.util.Log;

@SuppressLint("UseSparseArrays")
@SuppressWarnings("unused")
public class GSONTest {

private HashMap<Integer, B> myMap;
private String extra;

private GSONTest() {
Log.e("GSONTest", "default constructor GSONTEST was called");
}

public GSONTest(String extra) {
myMap = new HashMap<Integer, B>();
this.extra = extra;
myMap.put(1, new B(7));
Log.e("GSONTest", "parameter constructor GSONTEST was called");
}

private static class B {
int child;
private B() {
Log.e("B", "default constructor B was called");
}

private B(int child) {
Log.e("B", "parameter constructor B was called");
this.child = child;
}
}

public String toString() {
return this.myMap.size() + ": " + this.extra + ", " + this.myMap.get(1).child;
}

}

带有测试代码

GSONTest test = new GSONTest("hahaha");
Gson gson = new Gson();
String json = gson.toJson(test);
Log.e("json", json);
GSONTest result = gson.fromJson(json, GSONTest.class);
Log.e("result", result.toString());

此代码在运行时会在 logcat 上生成此输出

parameter constructor B was called
parameter constructor GSONTEST was called
{"extra":"hahaha","myMap":{"1":{"child":7}}}
default constructor GSONTEST was called
default constructor B was called
1: hahaha, 7

关于android - GSON可以处理静态私有(private)嵌套类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com