2012-10-31 20 views
5

मैं यह करने की कोशिश कर रहा हूं। मेरे पास सप्ताह के दिनों में enum है। मैं enum का इस्तेमाल किया है के बाद से काम करने के दिन लगातारक्या मैं enums के भीतर कक्षाओं घोंसला कर सकते हैं, और एक enum के भीतर सरणीसूची बना सकते हैं?

public enum WeekDay { 
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY; 
} 

हैं और मैं एक वर्ग है, Session कहा जाता है। एक सत्र बस एक विशेष समय पर क्या हो रहा है उदा। एक गणित वर्ग

public class Session { 
    // some fields 
    public String title; 
    public int duration,start,end; 

    /** several methods follow to get and set, and check e.t.c **/ 
} 

एक तीसरी कक्षा है, जिसे Venue कहा जाता है। स्थान सत्रों की मेजबानी करते हैं, उदा। enum यानी प्रत्येक दिन है में सत्र की एक सूची बना सकते हैं - गणित वर्ग एक स्थल "गणित श्रेणी" (एक उदाहरण) कहा जाता

public class Venue { // simply a place that can hold several sessions in a day 
    private String name; 
    private int capacity; 

    /** several methods**/ 
} 

मैं क्या करने की जरूरत है यह है पर, प्रातः 9 बजे से 10:00 करने के लिए किया जा सकता है इसके सत्र, और फिर मुझे एक स्थान के भीतर एक संरचना (एक ArrayList या enumset?) में enums पकड़ने की जरूरत है यानी एक स्थान सोमवार से शुक्रवार (आदर्श स्कूल कक्षाओं) के सत्र है।

public enum WeekDay { 
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY; 

    /** the list of sessions for a given day**/ 
    private ArrayList <Session> list; 
    private int numOfSessions; // number of sessions 

    /** with some methods like **/ 
    addSession(); 
    removeSession(); 
    getSession(); 
    checkTimeOfSession(); 
    ... 
} 

ताकि स्थल में, हम कर सकते हैं::

public class Venue { 
    private String name; 
    private int capacity; 
    private ? <WeekDay> list; //structure to hold days, i don't know which one to use yet 

    /** several methods like **/ 
    numOfSessionsOn(); 
    getSessionsOn(); 
    addSessionOn(); 
    removeSessionOn(); 
    ... 
} 

और यहाँ मेरा सवाल कर रहे हैं: तो यह कुछ इस तरह हो जाएगा

  1. कर सकते हैं मैं Session वर्ग घोंसला enum के भीतर?
  2. enumarraylists स्वीकार कर सकते हैं?
  3. स्थल के अंदर अपने सत्रों के साथ enums पकड़ने के लिए सबसे अच्छी संरचना क्या है?
  4. इसके लिए कोई बेहतर विचार?

किसी ने मुझे अभी बताया है कि मैं उसी दिन सभी स्थानों पर गुजर रहा हूं, उदा। सोमवार सभी स्थानों के लिए सोमवार है, इसकी सूची हर जगह से अपडेट की जाएगी। तो मुझे लगता है कि चर्चा का अंत है भले ही कोई टिप्पणी नहीं करता है।

+1

हां। सभी को। 4 को छोड़कर क्योंकि सत्र अलग-अलग इकाई है। सोमवार को भौतिकी के दो सत्र हो सकते हैं और अगले सोमवार के पास दूसरे विषय के दो अलग-अलग सत्र होंगे, इसलिए इस संरचना का उपयोग करना बुद्धिमान नहीं होगा। –

+0

क्या आपने अपनी समस्या का समाधान किया? –

उत्तर

1

यदि आप अपने सप्ताह के अंत में बहुत अधिक जोड़ते हैं, तो आपको सुपरक्लास या इंटरफ़ेस Weekday के बारे में सोचना चाहिए और प्रत्येक सप्ताह के अपने स्वयं के वर्ग में कार्यान्वित करना चाहिए।

तुम सच में अपने enum में करना चाहते हैं, तो आप इस तरह से यह कर सकता है:

switch (this) { 
case MONDAY: 
    return ... 
    break; 

default: 
    break; 
} 
:

1) की तरह विधि को लागू करें, हर विधि (और निर्माता में एक स्विच करते हैं)

2), विधि सार बनाओ हर काम करने के दिन के लिए एक गुमनाम कार्यान्वयन जोड़ें:

public enum weekday { 
    MONDAY { 
     @Override 
     public Object getSomething() { 
      // TODO Auto-generated method stub 
      return null; 
     } 
    }; 
    public abstract Object getSomething(); 
} 

3) निर्माता के लिए बहस करें:

public enum weekday { 
    MONDAY(new Object()); 
    final private Object object; 
    private weekday(Object object) { 
     this.object = object; 
    } 
} 

लेकिन जैसा कि मैंने कहा, एक गणना से अधिक अपने enum बनाने से बचने की कोशिश करें।

+0

धन्यवाद..मैं इसे आज़मा दूंगा – Obby

2

1) हाँ, आप कर सकते हैं।

2) एनम के पास सामान्य कक्षा हो सकती है। एकमात्र दुविधा यह है कि इसने ऑब्जेक्ट्स की संख्या तय की है (उदाहरण के लिए, आपके सप्ताहांत में सोमवार, बुधवार, आदि है)। तो, आपके पास

public enum WeekDay { 
    MONDAY, ..., FRIDAY; 
    private final List<Session> sessions; 
    private WeekDay { 
     this.sessions = new ArrayList<Session>(); 
    } 
} 

3) यह हमेशा इस मामले पर निर्भर करता है। आप अपने वीकडे

4) को बचाने के लिए EnumSet का उपयोग कर सकते हैं 4) आप कक्षा के रूप में अपने एनम का उपयोग करने की कोशिश कर रहे हैं। Enum हमेशा परमाणु होना चाहिए (राज्य नहीं है)। मैं वीकडे को एक सरल एनम बनने दूंगा और जिस संरचना को मैंने पोस्ट किया था, उसकी संरचना की तरह:

public enum WeekDay { 
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY; 
} 
// Session have a topic and a duration 
public class Session { 
    private final String topic; 
    private final Duration duration; 
    public Session(String title, Duration duration) { 
     ... 
    } 
    // getter/setters 
} 
/** 
/* Venue is nothing more than an specialization of Session. So for example 
/* A venue is a session of math hat starts at 3pm. 
/*/ 
public class Venue { 
    private Session session; 
    private Time startTime; 
    ... 
} 
/** 
* Class that manages the venues that happens in a WeekDay. It can control 
* that will not add two Venus that happens at same period of time. 
*/ 
public class WeekDaySchedule { 
    private WeekDay weekDay; 
    private Set<Venue> venues; 
    ... 
} 
/** 
* Controls the whole week. 
*/ 
public class WeekSchedule { 
    private Collection<WeekDaySchedule> weekDaySchedules; 
    ... 
}