(JAVA枚举) - 枚举常量内的匿名类

时间:2016-02-02 14:49:17

标签: java enums anonymous-class

美好的一天!

我有一个只实现一个方法的接口。我不想让几个类都实现这一个单一的方法,因此我决定使用匿名类。

我对某些静态项使用枚举,这些枚举具有我的界面实例。但是,当我尝试在我的枚举常量中创建一个匿名类时,我的IDE(eclipse)字面上没有告诉我什么(好像它在代码块之外)。

我的问题如下:我可以在枚举常量中使用匿名类吗?

如果我的文字不清楚(抱歉我不是英文),请参阅下面的示例。

代码示例

/**
 * My Interface 
 */

public interface IPotato {

    public void eatPotato();
} 

/**
* My enum class
*/
    public enum PotatoEnum {

        I_WANT_TO_EAT_POTATO(new IPotato() {
            @Override
            public void eatPotato() {
                // Cant put code here.
            } });

        private IPotato _myAnonymousClass;
        private PotatoEnum(IPotato anonymousClass){
            this._myAnonymousClass = anonymousClass;
        }

        public IPotato getPotato(){
            return _myAnonymousClass;
        }

    }

3 个答案:

答案 0 :(得分:3)

你可以这样做,这是一个非常有效的解决方案。

作为建议,让你的枚举实现你的界面,使代码更具可读性:

public enum PotatoEnum implements IPotato{

        I_WANT_TO_EAT_POTATO(){

            @Override
            public void eatPotato() {
                // Cant put code here.

            }},//more ENUMS ;

    }

答案 1 :(得分:0)

你可以这样做。您错误的原因是您在单个文件中有两个公共标识符(枚举和接口)。从枚举中删除public并且它将起作用

public interface IPotato {

public void eatPotato();

}

enum PotatoEnum {

I_WANT_TO_EAT_POTATO(new IPotato() {
    @Override
    public void eatPotato() {
        // Cant put code here.
    }
});

private IPotato _myAnonymousClass;

private PotatoEnum(IPotato anonymousClass) {
    this._myAnonymousClass = anonymousClass;
}

public IPotato getPotato() {
    return _myAnonymousClass;
}

}

答案 2 :(得分:0)

简单地说是

通过这样做你正在做这样的事情:

I_WANT_TO_EAT_POTATO(An object of a virtual class that implments IPotato class);

同样如下:

I_WANT_TO_EAT_POTATO(Passing any parameter defined by constructor);

Enum常量视为内部类,并将它们的构造函数传递给它们