使用方法从一个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
循环引发错误的原因是您犯了两个错误:
employeeSet
是 List<Employee>
,而您在遍历它时要求 String
。这是不正确的 - 将 employee
的类型更改为 Employee
.
您正在尝试从您的字段 employeeSet
访问 getFirstName()
。这行不通,因为 Set
没有这样的方法。我相信您打算在 employee
.
上调用该方法
此外,您可以使用 Java 8 streams 将代码简化为以下一行代码:
public void printEmployeeNames() {
employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println);
}
如果我将对象放入一个集合中,我在从一个 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
循环引发错误的原因是您犯了两个错误:
employeeSet
是List<Employee>
,而您在遍历它时要求String
。这是不正确的 - 将employee
的类型更改为Employee
.您正在尝试从您的字段
employeeSet
访问getFirstName()
。这行不通,因为Set
没有这样的方法。我相信您打算在employee
. 上调用该方法
此外,您可以使用 Java 8 streams 将代码简化为以下一行代码:
public void printEmployeeNames() {
employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println);
}