如果我有一堆包含Enum和EnumMap的类,我想为这些类创建一个超类.
public interface ColorEnum {
}
class ColorMarbles extends Toy {
enum MARBLE implements ColorEnum
{ BLUE, GREEN }
EnumMap<MARBLE, String> names = new EnumMap<MARBLE, String>(MARBLE.class);
//stuff
// fields
public void populate(ArrayList<String> designer) {
int i = 0;
for(MARBLE marble : MARBLE.values()) {
marble.name = designer.get(i);
i++;
}
}
}
class ColorBalloons extends Toy {
enum BALLOON implements ColorEnum
{ YELLOW, RED }
EnumMap<BALLOON, String> names = new EnumMap<BALLOON, String>(BALLOON.class);
//stuff
// fields
public void populate(ArrayList<String> designer) {
int i = 0;
for(BALLOON balloon : BALLOON.values()) {
balloon.name = designer.get(i);
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个超类,使其包含一个包含类似ColorEnum类型的枚举的通用EnumMap?
public abstract class Toy {
EnumMap<ColorEnum, String> names;
}
Run Code Online (Sandbox Code Playgroud)
eidt:我意识到我的例子太模糊了.狗可能是一个坏榜样.我把它改成希望更清楚的东西.
我所拥有的是一堆类,其中包含填充EnumMap的populate等方法.名称按预定义顺序排列.我不希望在每个类中定义填充,而是希望能够将它带到Toy超类中,因此我不必在每个新类类型的Toy中保留复制粘贴.
希望这能解释更多我正在寻找的东西.
我觉得你的设计不必要地过于复杂.
随着枚举
如果您不需要类继承,则可以像使用顶级类一样直接使用枚举.
public interface Animal {}
public enum Dog implements Animal {
HUSKY("Husky"), LAB("Labrador");
private final String name;
Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
枚举可以像任何其他Java类一样声明字段,方法和实现接口.他们唯一的限制是他们的直接超类总是java.lang.Enum无法扩展.
但是,每个枚举常量都可以将自己的一组唯一数据传递给它的构造函数.甚至可能每个常量都可以通过其独特的实现覆盖该枚举的常用方法.
一个很好的教程,解释更多关于枚举的全部功能:http: //javarevisited.blogspot.cz/2011/08/enum-in-java-example-tutorial.html
没有枚举
如果你需要一个实际的类继承来共享一些常见的方法(例如来自Animal超类),我仍然会放弃map方法,而是尝试更多面向OOP的方法:
public class Animal {
}
public abstract class Dog extends Animal {
public abstract String getName();
public static class Husky extends Dog {
@Override
public String getName() {
return "husky";
}
}
public static class Lab extends Dog {
@Override
public String getName() {
return "labrador";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8750 次 |
| 最近记录: |