【发布时间】:2016-05-16 16:45:46
【问题描述】:
所以我最近学到了很多东西,所以我要回过头来重构以前课程中的作业,以使用良好实践来实施它们。一项作业让我们实现了一个包含 Course 对象数组的 Planner 对象。我正在尝试创建一些课程常量,这样我就可以访问一些流行的课程,而不必每次都创建全新的对象,这样我就可以轻松地访问它们而无需经历课程构建过程。我对枚举没有太多经验,而且我似乎找不到任何关于如何实际使用枚举来存储对象常量的信息。我最初想让它们在 Course 类中成为常量,但 Effective Java 坚持应该在这种情况下使用枚举。我的实现是否有意义?我应该如何制作包含 Course 常量的枚举,以便我可以实际检索它们?我使用 Builder 方法来创建课程。
public enum Courses {
CSE_114, CSE_214, CSE_219, CSE_215;
private final static Course CSE_114_COURSE = new Course
.Builder("Computer Science 1", "Paul Fodor", 114)
.section((byte)1).department("CSE").build();
private static final Course CSE_214_COURSE = new Course
.Builder("Data Structures", "Ahmad Esmaili", 214)
.section((byte)1).department("CSE").build();
private static final Course CSE_219_COURSE = new Course
.Builder("Software Development", "Richard McKenna", 219)
.section((byte)1).department("CSE").build();
private static final Course CSE_215_COURSE = new Course
.Builder("Foundations of CS", "Paul Fodor", 215)
.section((byte)1).department("CSE").build();
public static Course get(Courses c) {
switch(c) {
case CSE_114: return CSE_114_COURSE;
case CSE_214: return CSE_214_COURSE;
case CSE_219: return CSE_219_COURSE;
case CSE_215: return CSE_215_COURSE;
default: throw new IllegalArgumentException("Course does not exist.");
}
}
}
【问题讨论】:
-
只是出于好奇,您为什么不使用 Map
而不是使用枚举? -
@AndrewWilliamson 我只是对如何使用枚举来保存一堆常量感兴趣,但最后我意识到枚举根本没有必要。我从来没有真正使用过地图。我理解这个概念,这实际上听起来是个好主意,因为我可以按名称检索课程并将其设置为 O(1)。如果我要使用地图,你认为哪里是合适的地方?在像以前一样的 CourseManager 课程中?
-
您可以只使用 Map 而不是 CourseManager 类。如果你想要额外的功能,比如从文件或网络加载,那么你肯定会想要创建一个特定的 CourseManager 类,它可能包含一个 Map 和一些其他实用程序方法。