2016-04-30 3 views
5

У меня возникают проблемы с получением метода из одного класса для работы, если я помещаю объекты в набор.Использование метода из одного класса в набор

Так что я

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

Там есть много другого кода, который я могу создавать, если это необходимо, но я не позволил изменить Employee класс.

Так что для моего кода я должен создать класс за Set из Employee с которой я сделал с

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

Проблема у меня в том, что он не будет компилироваться, как он говорит

«несовместимые типы»

и выделяет employeeSet в

for (String employee : employeeSet) 

Другая проблема заключается в том, что он не может получить доступ к методу для getFirstName(). Я попытался выделить метод, использующий

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

Это также не будет компилироваться, как говорится

«не может найти символ - метод getFirstName()».

Редактировать. Спасибо за помощь в решении этой проблемы, я изменил ее на это, и она сработала.

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

ответ

2

это здесь не имеет смысла:

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 
} 

И создать в класс сотрудников соответствующего Сеттера и геттеров

в этом случае:

private String firstName; 

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

-акцессоры методы уже были там, я просто не включать их для краткости. Спасибо за помощь, хотя –

+0

приветствуются ... –

1

Это должно быть

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

Set не метод ПгвЬЫате. Ваш employee объект есть.

1

Прежде всего, вы слышали о encapsulation? Объявление public Set<Employee> employeeSet является примером плохой практики, и вы должны использовать личное поле с каким-то геттером. Причина ваш for цикл поднимает ошибки в том, что вы сделали две ошибки:

  1. employeeSet является List<Employee>, в то время как вы просите о String при переборе над ним. Это неверно - измените тип employee на Employee.

  2. Вы пытаетесь получить сообщение getFirstName() с вашего поля employeeSet. Это не сработает, так как Set не имеет такого метода. Я полагаю, вы намеревались вызвать метод на employee.

Кроме того, вы можете упростить код к следующему однострочника с Java 8 streams:

public void printEmployeeNames() { 
    employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println); 
} 
Смежные вопросы