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
属性。参见示例。我在查看器信息中添加了设置的实现,关于标题和一些内容(如果是新闻)以及温度(如果是天气)