(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
常量视为内部 类 并且您正在向它们传递其构造函数的参数
美好的一天!
我有一个只实现一个方法的接口。我不想制作几个 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
常量视为内部 类 并且您正在向它们传递其构造函数的参数