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文件

android枚举的使用

2.通过javap看本质

我们先看下普通的类

android枚举的使用

这跟我们定义的是一样的,再看下枚举生成的java类

android枚举的使用

这里我们发现的大不同,然来我们定义的枚举,到头来给我们生成了这么一个东西。

3.使用反编译工具生成原始代码

其实上面那个还不是罪原始的能代表这个类的代码,我们使用饭编译工具将class反编译一下。

下载地址:

http://www.javadecompilers.com/jad

使用:将你的class文件复制到jad解压后的目录下

android枚举的使用

打开枚举类反编译生成的代码

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.结论

使用枚举需谨慎,重要的是要知道原理,面试有用