programacion - que es una clase en java
Usando un método de una clase en un conjunto (3)
Tengo problemas para que un método de una clase funcione si coloco los objetos en un conjunto.
Así que tengo
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;
}
Hay muchos otros códigos que puedo publicar si es necesario, pero no puedo cambiar la clase Employee
.
Entonces, para mi código, tengo que crear una clase para un Set
de Employee
que he hecho con
public class Records {
public Set<Employee> employeeSet = new HashSet<Employee>();
public Records() {
}
}
Ahora necesito un método que imprima los detalles de todos los empleados en el conjunto. Aquí está mi intento hasta ahora
public void printEmployeeNames() {
for (String employee : employeeSet) {
System.out.println(this.employeeSet.getFirstName());
}
}
El problema que tengo es que no compilará como dice
"tipos incompatibles"
y destaca employeeSet
en
for (String employee : employeeSet)
Mi otro problema es que no puede acceder al método de getFirstName()
. Intenté aislar el método usando
public void printEmployeeNames() {
System.out.println(this.employeeSet.getFirstName());
}
Esto tampoco compilará como dice
"no se puede encontrar el símbolo - método getFirstName ()".
Editar. Gracias por la ayuda con este problema, lo cambié a esto y funcionó.
public void printEmployees()
{
for (Employee employee: employeeSet)
{
System.out.println(employee.getFirstName());
}
}
Antes que nada, ¿has oído hablar de encapsulación ? La declaración public Set<Employee> employeeSet
es un ejemplo de una mala práctica, y debe usar un campo privado con algún tipo de getter. La razón por la cual su bucle for
está generando errores es que cometió dos errores:
employeeSet
es unaList<Employee>
, mientras que usted está pidiendo unaString
al iterar sobre ella. Esto es incorrecto: cambie el tipo deemployee
aEmployee
.Está intentando acceder
getFirstName()
desde su campoemployeeSet
. Esto no funcionará, ya queSet
no tiene dicho método. Creo que quisiste llamar al métodoemployee
.
Además, puede simplificar su código para el siguiente trazador de líneas con flujos Java 8 :
public void printEmployeeNames() {
employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println);
}
Eso debería ser
for (Employee employee: employeeSet)
{
System.out.println(employee.getFirstName());
}
Set
no tiene un método de primer nombre. Su objeto employee
tiene.
esto aquí no tiene sentido:
for (String employee: employeeSet)
{
System.out.println(this.employeeSet.getFirstName());
}
ya que employeeSet es un conjunto y los conjuntos no tienen un método llamado getFirstName
tu tienes que hacer:
for (Employee employee: employeeSet) //for every EMPLOYEE in the employeeSet
{
System.out.println(employee.getFirstName()); //from that employ get the name
}
Y crear en la clase Employee el Setter respectivo y getters
en este caso:
private String firstName;
/**
* @return the employeeNumber
*/
public final String getEmployeeNumber() {
return firstName;
}