Java 如何在列表中存储不同类型的JSON对象?
我想使用Java 如何在列表中存储不同类型的JSON对象?,java,android,json,Java,Android,Json,我想使用RecyclerView在新闻提要中显示不同类型的新闻。例如,一个故事可以有一个天气变化的模板。因此JSON数据将包含日期、温度等 我从数据库中下载JSON格式的故事并对其进行解析。目前,我将解析的JSON对象存储在列表中。 FeedStoryContainer有两个属性,一个是表示类型的int,另一个是包含数据的对象。当需要绑定数据时,我将对象转换为基于int类型的正确故事类型。这种方法可以吗?在我看来,您的故事类型最好具有相同的基础和api。使用相同的api将它们保存在列表。根据it
RecyclerView
在新闻提要中显示不同类型的新闻。例如,一个故事可以有一个天气变化的模板。因此JSON数据将包含日期、温度等
我从数据库中下载JSON格式的故事并对其进行解析。目前,我将解析的JSON对象存储在列表中。
FeedStoryContainer
有两个属性,一个是表示类型的int
,另一个是包含数据的对象。当需要绑定数据时,我将对象
转换为基于int
类型的正确故事类型。这种方法可以吗?在我看来,您的故事类型最好具有相同的基础和api。使用相同的api将它们保存在列表。根据it类型(int)强制转换对象是一种解决方案,但迟早也不会有帮助。更好的方法是使用多态性
class Story
{
void apply( Viewer viewer )
{
System.out.println( "Default implementation" )
}
}
class News extends Story
{
void apply( Viewer viewer )
{
viewer.setTextBody( this.title + " " + this.content );
}
}
class Wheather extends Story
{
void apply( Viewer viewer )
{
viewer.setTextBody( this.title + " " + this.temperature );
}
}
code
List< Story > list;
for( Story story : list )
{
story.apply( this );
}
课堂故事
{
无效应用(查看器)
{
System.out.println(“默认实现”)
}
}
班级新闻延伸故事
{
无效应用(查看器)
{
viewer.setTextBody(this.title+“”+this.content);
}
}
课堂上,他在讲故事
{
无效应用(查看器)
{
viewer.setTextBody(this.title+“”+this.temperature);
}
}
代码
列表<故事>列表;
用于(故事:列表)
{
故事。应用(这个);
}
我认为这行不通。我使用gson将JSON解析为不同的对象。例如,weather类可以是class weather{String day,int temp}
,而news类可以是class news{String text,Date Date}
。这些类实际上没有一个基本类。使用的java类只是JSON内容的包装器。是的,但我相信这些数据会以某种方式显示出来。所以,如果您制作相同的api,查看器可以通过某种接口应用它。答案中的示例非常简单,应该添加一些用于格式化等的内容,简言之,一个类一个目的是最好的方式:)。好主意是添加一些故事不知道查看器的格式化程序/写入程序…但是在viewer
中的天气需要访问temp
属性,在viewer
中的News
需要访问date
属性。参见示例。我在查看器信息中添加了设置的实现,关于标题和一些内容(如果是新闻)以及温度(如果是天气)