java的枚举Enum

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/天,具体规则查看活动详情Blog Img