我可以在枚举中嵌套类,并在枚举中创建arraylist吗?

Obb*_*bby 5 java enums class

我正在努力做到这一点.我有一个enum工作日.我enum平日使用的是不变的

public enum WeekDay {
  MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY;
}
Run Code Online (Sandbox Code Playgroud)

我有一节课,叫做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 **/
}
Run Code Online (Sandbox Code Playgroud)

还有第三类,叫做Venue.场地主持会议,例如数学课程可以从上午9点到10点,在一个叫做"数学课"的场地(例子)

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

  /** several methods**/
}
Run Code Online (Sandbox Code Playgroud)

我需要做的是 - 在枚举中创建会话列表,即每天都有会话,然后我需要在场地内的结构(ArrayList或enumset?)中保存枚举,即场地有会话周一至周五(理想的是学校班级).所以它会是这样的:

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();
  ...
}
Run Code Online (Sandbox Code Playgroud)

所以在场地,我们可以:

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();
  ...
}
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:

  1. 我可以把Session班级嵌入enum吗?
  2. 可以enum接受arraylists吗?
  3. 在会场内举办会议的最佳结构是什么?
  4. 对此更好的想法?

有人告诉我,我将在同一天通过所有场地,无论星期一是星期一,所有场地,其列表将由每个场地更新.所以即使没有人发表评论,我认为这是讨论的结束.

tb-*_*tb- 1

如果您向工作日枚举添加了太多内容,则应该考虑一个超类或接口Weekday,并在自己的类中实现每个工作日。

如果您确实想在枚举中执行此操作,可以通过以下方式执行此操作:

1)实现方法,在每个方法(和构造函数)中进行切换,例如:

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

default:
    break;
}
Run Code Online (Sandbox Code Playgroud)

2)使方法抽象,为每个工作日添加一个匿名实现:

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

3)添加构造函数的参数:

public enum weekday {
    MONDAY(new Object());
    final private Object object;
    private weekday(Object object) {
        this.object = object;
    }
}
Run Code Online (Sandbox Code Playgroud)

但正如我所说,尽量避免让枚举不仅仅是一个枚举。