B-F*_*ir3 6 java enums subclass
使用它作为Enum like类的基类的最佳方法是什么.我希望能够创建不同的具体类型,而无需重新编写getter方法.
public enum Tool extends Item
{
Pickaxe("Pickaxe", 101),
Saw("Saw", 201);
}
Run Code Online (Sandbox Code Playgroud)
Tool.getNames()将返回Tool类中所有Item名称的列表.
public enum Item
{
Default("Name", 0);
private final int id;
private final String name;
Item(String name, int id)
{
this.id = id;
this.name = name;
}
public int getId()
{
return this.id;
}
public int[] getIds()
{
Item[] items = Item.values();
int[] ids = new int[items.length];
for (int i = 0; i < items.length; i++)
{
ids[i] = items[i].getId();
}
return ids;
}
public String getName()
{
return this.name;
}
public String[] getNames()
{
Item[] items = Item.values();
String[] names = new String[items.length];
for (int i = 0; i < items.length; i++)
{
names[i] = items[i].getName();
}
return names;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道不可能这样,但我怎么能处理这种情况呢?我希望能够像访问枚举一样访问每个类的成员:Tool.Pickaxe.
您将必须自己实现,您不能扩展已经实现的行为。但是,您可以强迫自己或其他任何人实施各种方法:
public interface Item {
public int getId();
public String getName();
}
Run Code Online (Sandbox Code Playgroud)
public enum Tool implements Item {
Pickaxe("Pickaxe", 101),
Saw("Saw", 201);
private final int id;
private final String name;
public Item(final String name, final int id) {
this.id = id;
this.name = name;
}
@Override
public int getId() {
return id;
}
@Override
public String getName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
这是第一部分,现在你不想要访问getIds(),并getNames()通过枚举“实例”本身,而是要通过类访问它们作为一个静态函数。
我希望这已经对您有所帮助,但是它还远远不够完整,对于泛型,甚至可能有一些方法可以使它更简单,但是一定要理解枚举不能扩展任何内容。
| 归档时间: |
|
| 查看次数: |
9147 次 |
| 最近记录: |