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

(JAVA Enums) - Anonymous class inside enum constant

美好的一天!

我有一个只实现一个方法的接口。我不想制作几个 class 来实现这个单一方法,因此我决定使用匿名 classes 来代替。

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

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

如果我的文字不清楚(抱歉我不是英语)请看下面的例子。

代码示例

/**
 * 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;
        }

    }

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

作为建议,让您的枚举实现您的接口以使代码更具可读性:

public enum PotatoEnum implements IPotato{

        I_WANT_TO_EAT_POTATO(){

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

            }},//more ENUMS ;

    }

你可以的。你犯错的原因是你有两个 public identifier (enum and interface) in single file 。从枚举中删除 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;
    }

}

简直是

这样做就是在做类似的事情:

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 常量视为内部 类 并且您正在向它们传递其构造函数的参数