java的枚举Enum
学了这么久的java,今天第一次尝试到java的枚举所带来的好处了
以前学C就知道枚举,所以也大概知道java的枚举是撒意思
java的枚举,就是将一组相关的常量写在一起,而无需在一个类中定义
我们以前定义一个常量可以这样
public static sss
而现在用枚举,就更方便了,我们还是以在windows和linux下获得classpath和web-inf目录为例,来说明下java的枚举的基本使用方法
比如我我们的项目运行在linux和windows系统上,我们要分别获得两个系统下的classpath和web-inf目录,这样我们就无需写一个静态方法或静态类来处理这个事情了
我先贴出代码
public enum EnumClassPath { /* * windows 获得classpath路径 * windows 获得web-inf 路径 */ WinClassPath(Thread.currentThread().getContextClassLoader().getResource("").toString().replace('/', '\\').replace("file:", "").substring(1).replace("%20", " ")), WinWebInf(Thread.currentThread().getContextClassLoader().getResource("").toString().replace('/', '\\').replace("file:", "").replace("classes\\", "").substring(1).replace("%20", " ")), /* * linux 获得classpath路径 * linux 获得web-inf 路径 */ LinuxClassPath(Thread.currentThread().getContextClassLoader().getResource("").toString().replace("file:", "").replace("classes/", "")), LinuxWebInf(Thread.currentThread().getContextClassLoader().getResource("").toString().replace("file:", "")); private String classpath; private EnumClassPath(String classpath){ this.classpath = classpath; } public String getClassPath() { return this.classpath; } }
解释下以上代码:
1、我们写了4个枚举变量,变量之间用逗号隔开,最后一个是分号,以上4个枚举变量简写如下:
WinClassPath(""),
WinWebInf(""),
LinuxClassPath(""),
LinuxWebInf("");
括号中为具体的获取classpath和web-inf路劲的方法
2,创建一个私有的字符串类型的变量
为何要创建一个字符串类型的变量?因为在我们的所有的枚举变量中只有一个字符串
是的,如果枚举变量中还有其他的变量,如boolean,那我们就还需要创建一个boolean类型的变量
如其中一个枚举变量是这样
LinuxWebInf("",boolean);
那就需要增加一个变量
private boolean b;
3、创建了一个构造函数
我们这里的枚举里面的参数只有一个,且是字符串,所以构造函数需要传入一个字符串
当然,和第二条一样,如果还有其他的参数,那就需要再创建一个构造方法
假设我们将其中一个枚举变量改成这样
LinuxWebInf("",boolean);
那就需要增加,注意是增加一个构造函数
private EnumClassPath(String classpath,boolean b){
this.classpath = classpath;
this.b = b;
}
还需要注意的是,这里建议使用private,以防止意外获取
4、获得数据
如果只有一个参数,那就是添加上面的最后一个方法即可
public String getClassPath()
如果还有一个参数,如上面提到的,有一个枚举变量,他的参数有两个,String和boolean
那么你就需要再加一个方法,这里您可以灵活添加
比如您可以添加
public boolean getB()
你还可以对有两个参数的枚举进行封装获得
public Map getBmap(){
//将这个枚举里的两个变量封装到map中
}
5,如何使用
本例,您可以这样获得WinClassPath("")的值
EnumClassPath.WinClassPath.getClassPath()
你还可以这样获得LinuxWebInf("",boolean)的值
分别获取
获得String EnumClassPath.LinuxWebInf.getClassPath()
获得boolean EnumClassPath.LinuxWebInf.getB()
您还可以一次性获取,被封装到了Map中
EnumClassPath.LinuxWebInf.getBmap()
以上便是java枚举Enum的简单用法,留下笔记,欢迎大家参考
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情