【问题标题】:Accessing a list in a Java object访问 Java 对象中的列表
【发布时间】:2015-06-20 20:18:18
【问题描述】:

我一直在尝试解决这个问题 1 小时 30 分,这对于一个看起来非常简单的问题来说太混乱了,所以我来这里询问。

我向第 3 方 API 发送获取请求,以获取 xml 格式的动漫(电影)详细信息。 我将这些存储在 Ann.java 类中,该类由 netbean 的 JAXB xml 绑定从示例 xml 响应自动生成。

最初我使用的 xml 文件只返回一个动漫条目,因此我可以使用

String output = gt.fetchMovie().getAnime().getName();

gt 是我的网络服务。这会将动画的名称打印到我的 IDE。

我更改了设置,以便第 3 方 API 响应为我提供多个动画结果,而不仅仅是一个。我现在搜索“新世纪福音战士”并得到 3 个结果。

但是,xml 和 java 类的新模式意味着属性存储为列表。例如。如果我想访问动画的 getName,它就在这个结构中:

public class Ann {

protected List<Object> animeOrManga;

public List<Object> getAnimeOrManga() {
        if (animeOrManga == null) {
            animeOrManga = new ArrayList<Object>();
        }
        return this.animeOrManga;
    }

public String getName() {
            return name;
        }

我一直在试图弄清楚如何返回 getName,但找不到任何可以解释我想要做什么的东西。我不够聪明,无法“弄清楚”,并且已经进行了 1 小时 30 次的反复试验。

我知道我想做这样的事情,但猜测语法是不可能的,一切都变红了,或者找不到符号,或者其他什么。

List<Object> = gt.fetchMovie().getAnimeOrManga();
For each (list object)
getName();

感谢您的阅读!

【问题讨论】:

  • 如果我对如何在语言中做一些简单的事情(例如迭代)有疑问,我的第一反应会是查找有关该语言的教程或书籍,而不是在论坛中提问。
  • 更新:有人向我解释说,我的自动生成的 Ann 类需要手动修改才能正确使用它。以codefor (Object item:animeOrManga){ if(item instanceof Anime){ Anime a = (Anime) item; 的形式给了我一个修复。 System.out.println(a.getName()); }elseif(item instanceof Manga){ Manga m = (Manga) item; System.out.println(m.getName()); } }code 我将考虑制作我自己的自定义 xml 解析,只需要以更简单的方式处理我需要的数据

标签: java list


【解决方案1】:

如何创建一个具有 name 属性的类

public class Animal {
private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

然后你可以使用

List<Animal> animeOrManga = gt.fetchMovie().getAnimeOrManga();

然后你可以使用每个。

【讨论】:

  • 一切都已经存储在 Ann.java 类中,所以如果我能弄清楚语法,我应该可以直接从那里访问它......我仍在尝试,但建议还没有工作了:)
  • 我认为你应该让你的 ann 将受保护的 List AnimeOrManga 更改为 List AnimeOrManga 并删除 ann 中的 getName() 函数
  • 我不明白你建议的含义,但其他一些人提到它,我开始明白了。这可能是正确的答案,但是我走了一条不同的路线,我没有使用 4000 行自动生成的 Ann 类,而是制作了一个自定义 xml 解析器,将我想要的数据放入一个更容易使用的简单自定义 Ann 类中。谢谢大家。
【解决方案2】:

您提供的伪代码可以用Java编写如下:

List<Ann> list = new ArrayList<Ann> // You want the list as specific as possible
list.clone(gt.getAnimeOrManga());
for(Ann listObject : list) {        // For each loop
    listObject.getName();
}

使用的是 for-each 循环,这正是声音的含义:对于此列表中的每个事物都执行此操作。

clone() 方法接受一个数组列表并将其复制到新的列表中。 见这里:How do I copy the contents of one ArrayList into another?

【讨论】:

  • 感谢您的回复。在我看来,克隆现有数据似乎不是正确的方法。我只想从它保存到的类中访问它。我在teamliquid.net/forum/general/… 发布了问题的另一个描述(带有屏幕截图!),如果您想再看一下,希望更简化。非常感谢您的尝试:)
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2021-05-24
  • 2015-06-12
  • 1970-01-01
  • 2020-07-08
  • 2017-12-29
  • 2018-05-09
  • 1970-01-01
相关资源
最近更新 更多