2016-04-30 21 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 वर्ग बदलने की अनुमति नहीं कर रहा हूँ है।

तो मेरी कोड के लिए मैं एक Employee की Set रों जो मैं

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) 

मेरी दूसरी समस्या यह है कि यह 012 के लिए विधि तक नहीं पहुंच सकता। मैं विधि

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

यह भी का उपयोग कर संकलन नहीं होगा अलग करने के लिए "- विधि getFirstName() प्रतीक नहीं मिल सकता है" के रूप में यह कहा गया है

कोशिश की है।

संपादित करें। इस समस्या के साथ मदद के लिए धन्यवाद, मैंने इसे बदल दिया और यह काम किया।

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

उत्तर

2

इस यहाँ कोई मतलब नहीं है कर्मचारी वर्ग संबंधित सेटर और गेटर्स

इस मामले में:

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 एक firstname विधि नहीं है। आपके employee ऑब्जेक्ट में है।के बाद से employeeSet एक सेट है और सेट न एक विधि getFirstName

कहा जाता है आप क्या करना है है

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

:

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

और में बनाने

1

सबसे पहले, क्या आपने encapsulation के बारे में सुना है? घोषणा public Set<Employee> employeeSet खराब अभ्यास का एक उदाहरण है, और आपको किसी प्रकार के गेटटर के साथ एक निजी क्षेत्र का उपयोग करना चाहिए।

  1. employeeSet, एक List<Employee> है आप एक String के लिए पूछ रहे हैं, जबकि जब यह खत्म हो पुनरावृत्ति: कारण अपने for पाश त्रुटियों को ऊपर उठाने जाती है कि आप दो गलतियाँ की है। यह गलत है - employee से Employee के प्रकार को बदलें।

  2. आप अपने क्षेत्र employeeSet से getFirstName() तक पहुंचने का प्रयास कर रहे हैं। यह काम नहीं करेगा, क्योंकि Set में ऐसी कोई विधि नहीं है। मेरा मानना ​​है कि आप employee पर विधि को कॉल करना चाहते थे।

इसके अलावा, आप Java 8 streams साथ के बाद एक-लाइनर के लिए अपने कोड को आसान बनाने में कर सकते हैं:

public void printEmployeeNames() { 
    employeeSet.stream().map(Employee::getFirstName).forEach(System.out::println); 
} 
संबंधित मुद्दे