una que programacion miembros metodos metodo ejemplos clases clase atributos atributo java methods types set hashset

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:

  1. employeeSet es una List<Employee> , mientras que usted está pidiendo una String al iterar sobre ella. Esto es incorrecto: cambie el tipo de employee a Employee .

  2. Está intentando acceder getFirstName() desde su campo employeeSet . Esto no funcionará, ya que Set no tiene dicho método. Creo que quisiste llamar al método employee .

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