黑马程序员技术交流社区

标题: 枚举详解以及常见问题解答 [打印本页]

作者: aqiu    时间: 2019-5-15 10:22
标题: 枚举详解以及常见问题解答
本帖最后由 aqiu 于 2019-5-15 10:24 编辑

首先先抛出几个问题:
1.枚举允许继承类吗?
2.枚举允许实现接口吗?
3.枚举可以用等号比较吗?
4.可以继承枚举吗?
5.枚举可以实现单例模式吗?
6. 当使用compareTo()比较枚举时,比较的是什么?
7. 当使用equals()比较枚举的时候,比较的是什么?


下面我们就来详谈以下枚举类:
先来个Demo
[Java] 纯文本查看 复制代码
public enum Fruit{
    APPLE(1),ORANGE(2),BANANA(3);
    int code;

    Fruit(int code){
        this.code=code;
    }
}

反编译Fruit.class文件之后,可以得到如下内容:
[Java] 纯文本查看 复制代码
public final class Fruit extends Enum
{

    public static Fruit[] values()
    {
        return (Fruit[])$VALUES.clone();
    }

    public static Fruit valueOf(String s)
    {
        return (Fruit)Enum.valueOf(Fruit, s);
    }

    private Fruit(String s, int i, int j)
    {
        super(s, i);
        code = j;
    }

    public static final Fruit APPLE;
    public static final Fruit ORANGE;
    public static final Fruit BANANA;
    int code;
    private static final Fruit $VALUES[];

    static
    {
        APPLE = new Fruit("APPLE", 0, 1);
        ORANGE = new Fruit("ORANGE", 1, 2);
        BANANA = new Fruit("BANANA", 2, 3);
        $VALUES = (new Fruit[] {
            APPLE, ORANGE, BANANA
        });}
}


可见,Jvm编译器背地里是使用上面的方式来处理枚举的。它做了几件事:






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2