Java 中一个典型的枚举类型,看似字符串值,但包含一些附加的信息,包括排序以及附加的方法可以获取枚举值的信息。 下面是一个基本的枚举类型:
可增加附加信息,例如私有构造器、私有属性等,如下:
在上面的例子中,我们引入了 getValue() 方法,这便是枚举的行为定义。 接下来我们要做的是枚举类型对接口的继承以及实际的用途。 为了显示工作过程,我们首先做一个接口,用来实现类和数据库表的一个映射:
name() 方法这个时候被注释掉,待会我们会取消注释。 接下来我们创建一个新的 Java 类用以定义和数据库之间的映射关系:
然后我意识到了,其实有更好的方法来映射一个类到数据库表,上面这个例子很做作。当我们定义了映射到表的类时,我们需要定义一个独立的映射类,但实际上用枚举更好,数据库表中的字段可以是枚举的成员。 例如下面这样写不是更简单吗?
而且我们可以通过给枚举类型附加一些方法来实现数据库映射的细节:
现在我们可以使用这个枚举来迭代所有字段并创建相应的表:
这个 PersonMapping 枚举类型看起来不错,但是它不允许我们使用不同的类到数据库的映射,因此我们需要抽象,需要接口。从上面的代码看,我们需要枚举类型两个通过的方 法:name() 和 values(),第一个方法返回当前枚举值的名字,第二个就是列出所有的枚举值。 首先,我们为枚举添加一个接口:
然后注释掉我们前面提到的 name() 方法:
最后我们编写一个 dbTableCreate() 方法来让其他的枚举类型可重用这个方法:
完整的方法:
讲解就到此结束,我们得出了一些结论:
总而言之,你可以像使用普通 Java 类一样来使用枚举类型。 Java Design Demo--枚举类型--避免嵌套过多我们在初学时用过if--else的语句,也用过switch,但是你会发觉如果嵌套过多代码可读性变差。 如以下我们写过通过分数给学生成绩评级,简写后的代码如下 A示例
B: 这样写有种面向过程的感觉,而且有点不符合人类思维,我们人类思考,首先是对优良 及格 不及格有一个概念,有知道他的范围.....然后再去判断他的分数 使用枚举进行重构:
反思,如果为了效率,我绝大多数会使用A示例,但是工程较大,就采用B示例, 因为B的可读性和修改性,扩展性,重用性都比A示例要好用的多。 相比A示例我们还知道各评级的分数段,在灵活性也变强了。 附带枚举类型的api方法 |
|
来自: koolboy2015 > 《Java》