【问题标题】:How to create a list of objects and access to their attributes如何创建对象列表并访问其属性
【发布时间】:2017-02-13 05:05:47
【问题描述】:

我创建了一个对象 N,它有一些属性,像这样:

public class LogEvidence {
private String comment;
private String url;
private String time;

public LogEvidence(String comentario, String url, String tiempo) {
    super();
    this.comment = comentario;
    this.url = url;
    this.time = tiempo;
}

public String getComentario() {
    return comment;
}

public void setComentario(String comentario) {
    this.comment = comentario;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getTiempo() {
    return time;
}

public void setTiempo(String tiempo) {
    this.time = tiempo;
}

@Override
public String toString() {
    return "LogEvidence [comentario=" + comment + ", url=" + url + ", tiempo=" + time + "]";
}
}

现在我想做这样的事情:

ArrayList<LogEvidence>log = new ArrayList<LogEvidence>();

我想浏览列表并将所有属性添加到我的对象中,我的意思是这样的:

log.setComment("comment one");
log.setUrl("http://google.com");
log.setTime("04:20");

也许这是不可能的,我必须执行以下操作?

List list= new List();
 LogEvidence object1= new LogEvidence ();
  object1.setComment("comment");
  object1.setUrl("http://url.com");
  object1.setTime(20);
lista.add(object1);

【问题讨论】:

  • 你需要从列表中获取一个对象来调用你的访问器方法。 log.get(0).setComment("blah blah"); 返回列表中的第一个元素(索引 0)并调用 setComment
  • 理想情况下最后的代码是正确的方式
  • 不清楚你想做什么。 log.setComment(...) 是什么意思?

标签: java list object arraylist


【解决方案1】:

你可以这样做:

创建LogEvidence的对象。

LogEvidence logEvidence = new LogEvidence();
logEvidence.setComentario("comment one");
logEvidence.setUrl("http://google.com");
logEvidence.setTiempo("04:20");

并将其添加到数组列表中。

log.add(logEvidence);

因此,您可以创建更多对象并继续放入列表中。由于您的列表被命名为log,这就是为什么您将添加log

再解释一下,应该是这样的:

List<LogEvidence> logEvidenceList = new ArrayList<>();

LogEvidence logEvidence1 = new LogEvidence();
logEvidence1.setComentario("comment one");
logEvidence1.setUrl("http://google.com");
logEvidence1.setTiempo("04:20");
logEvidenceList.add(logEvidence1);

LogEvidence logEvidence2 = new LogEvidence();
logEvidence2.setComentario("comment one");
logEvidence2.setUrl("http://google.com");
logEvidence2.setTiempo("04:20");
logEvidenceList.add(logEvidence2);

....
....
....

或者通过构造函数调用,这会变得更加简洁易读。

List<LogEvidence> logEvidenceList = new ArrayList<>();

LogEvidence logEvidence1 = new LogEvidence("comment one","http://google.com","04:20");
logEvidenceList.add(logEvidence1);

LogEvidence logEvidence2 = new LogEvidence("comment one","http://google.com","04:20");
logEvidenceList.add(logEvidence2);

....
....
....

现在,当你想从列表中检索对象时,可以遍历列表,一一获取;

for (LogEvidence evidence : logEvidenceList) {
    System.out.println(evidence);
}

更多关于ArrayList的信息

【讨论】:

    【解决方案2】:

    正如 Kon 所评论的,您正在尝试对列表中的对象而不是列表本身进行操作。

    有几种方法可以做到这一点,但由于你有一个参数化的构造函数,最简单的方法是:

    ArrayList<LogEvidence> log = new ArrayList<LogEvidence>();
    log.add(new LogEvidence("comment one", "http://url.com", "04:20");
    

    正在做什么:

    我们使用new ArrayList&lt;LogEvidence&gt;() 创建列表并将其分配给名为log 的变量。

    然后,我们创建一个新的LogEvidence 对象,已经通过它的构造函数参数分配了它的数据,new LogEvidence("comment one","http://url.com","04:20")

    由于它将存储在列表中,我们可以匿名使用它。我们直接将它添加到列表中,使用列表的.add(E e) 方法,而不是将其分配给变量。


    在这种情况下,您不需要定义或分配不必要的变量。

    如果您需要从列表中访问任何特定的LogEvidence,您可以使用.get(int index) 方法。在这种情况下,log.get(0) 返回第一个元素,将返回您刚刚在上面的示例代码中插入的对象。

    您还可以使用FOR-EACH LOOP 以迭代方式作用于列表中的所有对象。这是一个打印列表的示例:

    for (LogEvidence evidence : log) {
        System.out.println(evidence);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      相关资源
      最近更新 更多