Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类中的Gson变量可以是字符串或列表<;整数>;_Java_Gson - Fatal编程技术网

Java 类中的Gson变量可以是字符串或列表<;整数>;

Java 类中的Gson变量可以是字符串或列表<;整数>;,java,gson,Java,Gson,将gson用于类时,类变量之一可以是字符串或列表。在不创建一个全新的类,其中一个类包含字符串,另一个类包含列表的情况下,是否可以捕获并修复此问题 下面是该类的一个示例: public class JsonClass { private List<Integer> range; public List<Integer> getRange() { return range; } } public类JsonClass { 私有列表范围; 公共列表getRan

将gson用于类时,类变量之一可以是字符串或列表。在不创建一个全新的类,其中一个类包含字符串,另一个类包含列表的情况下,是否可以捕获并修复此问题

下面是该类的一个示例:

public class JsonClass
{
    private List<Integer> range;

    public List<Integer> getRange() { return range; }
}
public类JsonClass
{
私有列表范围;
公共列表getRange(){return range;}
}

这仅在范围是包含整数的列表时有效,但也可以是字符串。gson消息是:“应该是字符串,但是是BEGIN\u数组。”

我认为你做不到。字符串和列表是完全不同的东西。由于Java是强类型的,您应该创建一个新类,以便能够以两种方式处理它

首先,如果您的代码不知道范围的类型,那么它将如何使用这个
JsonClass
。您可以将其声明为
对象
,但必须检查实例类型并每次强制转换它。或者,您可以有两个变量,每种类型一个。但是,你怎么处理另一个呢?您是否将其保留为空?您是否设置了默认值、空列表、空字符串?这些是你应该首先考虑的事情。 其次,默认情况下,Gson查看声明的字段类型以反序列化JSON。如果将其声明为
对象
,它将使用一些已知的默认值。您可以做的是创建并注册一个
TypeAdapter
,该适配器将包含根据找到的内容反序列化JSON数组和JSON字符串的逻辑


我不推荐上述任何一种方法。我建议您尝试修复正在接收的JSON,以发送单个类型,或根据一些外部信息将其映射到不同类型,即不基于JSON本身

Java不允许两个具有相同名称(和相同参数类型)的方法。。。因此,您必须通过将两个实例划分为类来跟踪它们,或者只保留不同的字段
String-strRange
List-range
以及getter方法:
public-List-getRange()
public-String-getStrRange()