使用方法从一个class变成一个集合

Using a method from one class into a set

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

所以我有

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;
}

如果需要,我可以 post 还有很多其他代码,但不允许我更改 Employee class.

所以对于我的代码,我必须为 Employee 中的 Set 创建一个 class,我已经用

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());
    }
}

我遇到的问题是它不会像它所说的那样编译

"incompatible types"

并在

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

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

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

这也不会像它所说的那样编译

"cannot find symbol - method getFirstName()".

编辑。 感谢您帮助解决这个问题,我把它改成了这个,它成功了。

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

应该是

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

Set 没有名字方法。你的 employee 物件有 有。

这里没有意义:

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

因为 employeeSet 是一个集合并且集合没有名为 getFirstName 的方法

你必须做的:

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

并在 Employee class 中创建各自的 Setter 和 getters

在这种情况下:

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

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

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

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

  3. 上调用该方法

此外,您可以使用 Java 8 streams 将代码简化为以下一行代码:

public void printEmployeeNames() {
    employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println);
}