【问题标题】:Getters and Setters using returned data使用返回数据的 Getter 和 Setter
【发布时间】:2016-02-22 12:53:58
【问题描述】:

这听起来像是一个新手问题,但我仍在围绕核心 Java 概念发展自己的知识。

我会用一个例子来提出这个问题。

假设我有这些类,一个简单的 getter setter。

第一个代表第二个的列表。

public class JobList {

private List<Job> jobs;

public List<Job> getJobs() {
    return jobs;
}

public void setJobs(List<Job> jobs) {
    this.jobs = jobs;
}

然后。

public class Job {

private String name;
private String url;

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

public String getName() {
    return name;
}

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

public String getUrl() {
    return url;
}

在另一个类中,我有方法做各种事情来返回包含我想要在 getter 和 setter 中的值的列表。

public List someMethod() {
//Loop through stuff to get a list of names
}
return nameList;
}

然后说...

public List someOtherMethod() {
//Loop through stuff to get a list of urls
}
return urlist;
}

我希望能够使用 getter 和 setter 检索在这两种方法中返回的信息,以便在应用程序的其他地方使用。但是,如果不将 getter 和 setter 与上述两种方法放在同一个类中,我不确定如何做到这一点。

我需要这样做还是有其他更简单的方法/标准做法可以做到这一点?

【问题讨论】:

  • 什么类包含 JobList 实例?
  • 在这两个方法所在的类上,您需要有一个 JobList 的实例,您可以引用它来访问它的 getter/setter。
  • @SteveL 目前没有创建它的实例。从另一条评论中,我认为这是必需的,这确实有道理。
  • @aribeiro 不是这样吗?感谢您的提醒。

标签: java oop getter-setter


【解决方案1】:

你是这个意思吗?

Set<String> collectNames(JobList jobList) {
    Set<String> names = new HashSet<>();
    for(Job job : jobList.getJobs()) {
        names.add(job.getName());
    }
    return names;
}

此方法从 JobList 收集所有唯一的(因此是 Set 而不是 List)名称。

编辑:

要在 main 方法中使用此方法打印所有作业名称,请执行以下操作:

public static void main(String[] args) {
    JobList jobList = new jobList();
    // TODO: populate jobList with an array of Jobs
    Set<String> names = collectNames(jobList);
    // below implicitly AbstractCollection.toString() is called which returns a comma-separated representation of the contents
    System.out.println(names);
}

编辑 2:

该方法返回一个Set。您可以遍历 Set 以依次获取其所有元素:

// ...
Set<String> names = collectNames(jobList);
Iterator<String> it = names.iterator();
while(it.hasNext()) {
    String name = it.next();
    System.out.println(name);
}

【讨论】:

  • 我以前从未使用/遇到过 Set,所以我不会想到这一点。也就是说,这看起来是一种可行的方法。如果我要这样做,然后在 main 方法中说,运行该特定方法,然后在 job.getName 上执行 sysout,我会取回该方法处理的所有存储名称?
  • 不,请参阅上面的更新。我建议您先阅读一些 Java 基础知识,然后再在这里提出更多问题。
  • 关于该更新,是否可以使用以下内容逐个访问内容:System.out.println(names.get(i));(当然使用循环或迭代器等)
  • 不,请参阅上面的更新。您无法通过索引从 Set 中获取项目,因为 Set 是无序的。我建议您先阅读一些 Java 基础知识,然后再在这里提出更多问题。
【解决方案2】:

一般来说,我赞同 Adriaan 的回答,但如果可能的话,我会利用 Java 8 的特性:

Set<String> collectNames(JobList jobList) {
    return jobList.getJobs().stream()
           .map(Job::getName)
           .collect(Collectors.toSet());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2012-01-07
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多