如何简化多个相同外观的枚举?
How to simplify multiple same looking enumerations?
我得到了多个枚举,它们都实现了相同的接口 AnimationSet,但有更多的字段,例如文件名,每个枚举都必须实现完全相同的 getFilename()。
interface AnimationSet{
String getPath();
String getFilename();
}
public enum HammerAnimationSet implements AnimationSet{
ONE("1"),
TWO("2"),
THREE("3"),
FOUR("4");
private static String path = "hammer/";
private String filename;
private HammerAnimationSet(String filename){
this.filename = filename;
}
public String getFilename(){
return filename;
}
}
public enum ShopAnimationSet implements AnimationSet{
HEART("heart"),
MANA("mana bottle"),
LUCK("clover");
private static String path = "shop/";
private String filename;
private ShopAnimationSet(String filename){
this.filename = filename;
}
public String getFilename(){
return filename;
}
}
编辑:我现在使用这些枚举来填充 List<List<List<Image>>>
其中第一个列表对应于枚举和一组动画,第二个列表包含组中的所有动画,第三个列表(带图像)代表一个特定动画中的所有图像。
稍后我可以从这个列表中获取外部图像。
现在我正在寻找一种方法来simplify/shorten这段代码(方法和字段都是一样的)。
我考虑过一个超类,但那是不可能的,因为枚举已经扩展了枚举。我还考虑过将枚举更改为 类,但我想保留枚举值。我也想过抽象接口,但是我想的不行
能不能帮忙想个简单的办法
您可以考虑使用委派而不是继承:
public class AnimationSet {
private final String path, filename;
public AnimationSet(String path, String filename) {
this.path = path;
this.filename = filename;
}
public String getPath() {
return path;
}
public String getFilename(){
return filename;
}
}
public enum HammerAnimationSet {
ONE("1"),
TWO("2"),
THREE("3"),
FOUR("4");
final AnimationSet animationSet;
HammerAnimationSet(String filename) {
animationSet=new AnimationSet("hammer/", filename);
}
public AnimationSet getAnimationSet() {
return animationSet;
}
}
public enum ShopAnimationSet {
HEART("heart"),
MANA("mana bottle"),
LUCK("clover");
final AnimationSet animationSet;
private ShopAnimationSet(String filename){
animationSet=new AnimationSet("shop/", filename);
}
public AnimationSet getAnimationSet() {
return animationSet;
}
}
因此可以扩展 AnimationSet
的功能而无需调整任何 enum
。
我得到了多个枚举,它们都实现了相同的接口 AnimationSet,但有更多的字段,例如文件名,每个枚举都必须实现完全相同的 getFilename()。
interface AnimationSet{
String getPath();
String getFilename();
}
public enum HammerAnimationSet implements AnimationSet{
ONE("1"),
TWO("2"),
THREE("3"),
FOUR("4");
private static String path = "hammer/";
private String filename;
private HammerAnimationSet(String filename){
this.filename = filename;
}
public String getFilename(){
return filename;
}
}
public enum ShopAnimationSet implements AnimationSet{
HEART("heart"),
MANA("mana bottle"),
LUCK("clover");
private static String path = "shop/";
private String filename;
private ShopAnimationSet(String filename){
this.filename = filename;
}
public String getFilename(){
return filename;
}
}
编辑:我现在使用这些枚举来填充 List<List<List<Image>>>
其中第一个列表对应于枚举和一组动画,第二个列表包含组中的所有动画,第三个列表(带图像)代表一个特定动画中的所有图像。
稍后我可以从这个列表中获取外部图像。
现在我正在寻找一种方法来simplify/shorten这段代码(方法和字段都是一样的)。
我考虑过一个超类,但那是不可能的,因为枚举已经扩展了枚举。我还考虑过将枚举更改为 类,但我想保留枚举值。我也想过抽象接口,但是我想的不行
能不能帮忙想个简单的办法
您可以考虑使用委派而不是继承:
public class AnimationSet {
private final String path, filename;
public AnimationSet(String path, String filename) {
this.path = path;
this.filename = filename;
}
public String getPath() {
return path;
}
public String getFilename(){
return filename;
}
}
public enum HammerAnimationSet {
ONE("1"),
TWO("2"),
THREE("3"),
FOUR("4");
final AnimationSet animationSet;
HammerAnimationSet(String filename) {
animationSet=new AnimationSet("hammer/", filename);
}
public AnimationSet getAnimationSet() {
return animationSet;
}
}
public enum ShopAnimationSet {
HEART("heart"),
MANA("mana bottle"),
LUCK("clover");
final AnimationSet animationSet;
private ShopAnimationSet(String filename){
animationSet=new AnimationSet("shop/", filename);
}
public AnimationSet getAnimationSet() {
return animationSet;
}
}
因此可以扩展 AnimationSet
的功能而无需调整任何 enum
。