如何访问内部枚举类覆盖方法?

时间:2014-08-02 16:03:09

标签: java enums

主要访问getPrice()方法需要什么代码?

我可以使用内置值()访问公共枚举类型;功能

但是无法弄清楚如何打印价格,谢谢

public enum Drink {
    GUINNESS(Type.STOUT), 
    COLA(Type.COLA);

    private Type type;

    private Drink(Type type) {
        this.type = type;
    }

    private enum Type {
        STOUT {
            @Override
            public double getPrice() {
                return 4.0;
            }
        },
        COLA {
            @Override
            public double getPrice() {
                return 2.0;
            }
        };

        public abstract double getPrice();
    }

}

3 个答案:

答案 0 :(得分:2)

您必须在price枚举中为Drink添加一个getter。

public double getPrice() {
    return type.getPrice();
}

然后你可以这样做:

Drink cola = Drink.COLA;
double price = cola.getPrice();

答案 1 :(得分:2)

您无法访问public enum之外的私人内部枚举,但您可以委派该方法:

public enum Drink {

    GUINNESS(Type.STOUT), 
    COLA(Type.COLA);

    private Type type;

    private Drink(Type type) {
        this.type = type;
    }

    public double getPrice() {
        return type.getPrice();
    }

    private enum Type {
        STOUT {
            @Override
            public double getPrice() {
                return 4.0;
            }
        },
        COLA {
            @Override
            public double getPrice() {
                return 2.0;
            }
        };

        public abstract double getPrice();
    }

}

您在enum Drink中定义了相同的方法:

public double getPrice() {
    return type.getPrice();
}

答案 2 :(得分:1)

你不能,因为另一个类根本看不到嵌套的枚举。您可以将委派副本添加到顶级枚举。