2016-04-30 21 views
5

Mam problemy z uzyskaniem metody z jednej klasy do pracy, jeśli umieściłem obiekty w zestawie.Używanie metody z jednej klasy do zestawu

Więc mam

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

Jest wiele innych kodów, które można dodawać w razie potrzeby, ale nie wolno mi zmienić klasę Employee.

Więc dla mojego kodu muszę utworzyć klasę przez Set z Employee s który zrobiłem z

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

    public Records() { 
    } 
} 

Teraz muszę metodę, która będzie drukować dane wszystkich pracowników w zestawie. Oto moja próba tak daleko

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

Problem mam jest to, że nie będzie kompilować jak mówi

„niekompatybilne typy”

i podkreśla employeeSet w

for (String employee : employeeSet) 

Mój inny problem polega na tym, że nie może uzyskać dostępu do metody dla getFirstName(). Starałem się odizolować metody przy użyciu

public void printEmployeeNames() { 
    System.out.println(this.employeeSet.getFirstName()); 
} 

to również nie będzie kompilować jak stwierdza

"nie można odnaleźć symbol - metoda getFirstName()".

Edytuj. Dzięki za pomoc w tym problemie, zmieniłem go na to i zadziałało.

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

Odpowiedz

2

to tutaj nie ma sensu:

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

ponieważ employeeSet to zestaw i zestawy nie mają metody nazywanej getFirstName

trzeba zrobić:

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

I utworzyć w klasa pracownika odpowiedniego setera i pobierające

w tym przypadku:

private String firstName; 

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

getter i setter już tam, po prostu nie obejmują ich zwięzłości. Dziękujemy za pomoc –

+0

, serdecznie zapraszamy ... –

1

To powinno być

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

Set nie ma metody firstname. Twój obiekt employee ma.

1

Przede wszystkim, czy słyszałeś o encapsulation? Deklaracja public Set<Employee> employeeSet jest przykładem złej praktyki i powinieneś użyć prywatnego pola z jakimś geterem. Powodem pętla for jest podnoszenie błędów jest to, że popełnił dwa błędy:

  1. employeeSet JEST List<Employee>, podczas gdy prosisz o String podczas iteracji nad nim. Jest to niepoprawne - zmień typ employee na Employee.

  2. Próbujesz uzyskać dostęp do getFirstName() ze swojego pola employeeSet. To nie zadziała, ponieważ Set nie ma takiej metody. Sądzę, że chciałeś wywołać metodę na employee.

Ponadto, można uprościć kod do następnego jedną wkładką z Java 8 streams: Metody

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