android枚举的使用
简单的撸一下枚举的使用缺点,主要是为了面试使用。
枚举的使用, 看下面这篇别人写的文章:
https://blog.csdn.net/a78270528/article/details/46946369
具体的使用,我们就不介绍了,在android开发中,我们经常使用枚举,比如有很多地址的,表情处理的,大部分框架都使用的是枚举类,但是面试中偶尔会有面试官问你,你在开发中使用枚举么?
你回答:使用了啊,经常使用
继续问你:你知道枚举使用有什么不好的地方么?
你回答:android官方是不推荐使用枚举的,主要是比较占用内存。
继续问你:那你知道为什么枚举会比较占用内存么?
。。。。(完了,没了解过)
接下来,我们分析下,为什么谷歌不推荐你使用枚举
public enum IConstants { MON,TUE,WED,THU,FRI,SAT,SUN }
public class IConstant { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu"; String FRI = "Fri"; String SAT = "Sat"; String SUN = "Sun"; }
上面是一个枚举类,下面是一个普通类,其实都能够达到同样的效果,主要是分析他们有什么不同。
1.获取class文件
2.通过javap看本质
我们先看下普通的类
这跟我们定义的是一样的,再看下枚举生成的java类
这里我们发现的大不同,然来我们定义的枚举,到头来给我们生成了这么一个东西。
3.使用反编译工具生成原始代码
其实上面那个还不是罪原始的能代表这个类的代码,我们使用饭编译工具将class反编译一下。
下载地址:
http://www.javadecompilers.com/jad
使用:将你的class文件复制到jad解压后的目录下
打开枚举类反编译生成的代码
package com.huhai.nettydemo; public final class IConstants extends Enum { public static IConstants[] values() { return (IConstants[])$VALUES.clone(); } public static IConstants valueOf(String s) { return (IConstants)Enum.valueOf(com/huhai/nettydemo/IConstants, s); } private IConstants(String s, int i) { super(s, i); } public static final IConstants MON; public static final IConstants TUE; public static final IConstants WED; public static final IConstants THU; public static final IConstants FRI; public static final IConstants SAT; public static final IConstants SUN; private static final IConstants $VALUES[]; static { MON = new IConstants("MON", 0); TUE = new IConstants("TUE", 1); WED = new IConstants("WED", 2); THU = new IConstants("THU", 3); FRI = new IConstants("FRI", 4); SAT = new IConstants("SAT", 5); SUN = new IConstants("SUN", 6); $VALUES = (new IConstants[] { MON, TUE, WED, THU, FRI, SAT, SUN }); } }
你拿这样子的类6个静态的对象去跟几个静态常量相比,肯定是要大很多的
4.结论
使用枚举需谨慎,重要的是要知道原理,面试有用