使用从一个类到一个集合的方法

时间:2016-04-30 22:07:11

标签: java methods types set hashset

如果我将对象放入集合中,我在从一个类中获取方法时遇到问题。

所以我有

public class Employee {
    /* instance variables */
    private String firstName;
    private String employeeNumber;


    public Employee(String employNum) {
        super();
        this.employeeNumber = employNum;             
    }

...

public String getFirstName() {
   return this.firstName;
}

如果需要,我可以发布许多其他代码,但我不允许更改Employee类。

因此,对于我的代码,我必须为Set Employee创建一个类,我已经完成了

public class Records {
    public Set<Employee> employeeSet = new HashSet<Employee>();

    public Records() {
    }
}

现在我需要一种方法来打印集合中所有员工的详细信息。这是我到目前为止的尝试

public void printEmployeeNames() {
    for (String employee : employeeSet) {
        System.out.println(this.employeeSet.getFirstName());
    }
}

我遇到的问题是它不会按照说法编译

  

&#34;不兼容的类型&#34;

并在

中突出显示employeeSet
for (String employee : employeeSet) 

我的另一个问题是它无法访问getFirstName()的方法。我尝试使用

隔离方法
public void printEmployeeNames() {
    System.out.println(this.employeeSet.getFirstName());
}

这也无法编译,因为它声明了

  

&#34;找不到符号 - 方法getFirstName()&#34;。

编辑。 感谢您对此问题的帮助,我将其更改为此并且有效。

public void printEmployees()
   {
     for (Employee employee: employeeSet)
     {
        System.out.println(employee.getFirstName());
     }
  }

3 个答案:

答案 0 :(得分:2)

这没有任何意义:

for (Employee employee: employeeSet) //for every EMPLOYEE in the employeeSet
 {
    System.out.println(employee.getFirstName()); //from that employ get the name
 }

因为employeeSet是一个Set而且sets没有一个名为getFirstName的方法

你必须这样做:

private String firstName;

    /**
     * @return the employeeNumber
     */
    public final String getEmployeeNumber() {
        return firstName;
    }

在Employee类中创建相应的Setter和getter

在这种情况下:

self.stream.write(data)

答案 1 :(得分:1)

那应该是

for (Employee employee: employeeSet)
 {
    System.out.println(employee.getFirstName());
 }

Set没有firstname方法。您的employee对象已有。

答案 2 :(得分:1)

首先,你听说过encapsulation吗?声明public Set<Employee> employeeSet是一个不好的做法的例子,你应该使用一个带有某种getter的私有字段。你的for循环引发错误的原因是你犯了两个错误:

  1. employeeSetList<Employee>,而您在迭代时要求String。这是不正确的 - 将employee的类型更改为Employee

  2. 您正试图从您的字段getFirstName()访问employeeSet。这不起作用,因为Set没有这样的方法。我相信您打算在employee

  3. 上调用该方法

    此外,您可以使用Java 8 streams

    将代码简化为以下单行代码
    public void printEmployeeNames() {
        employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println);
    }