作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
将其用作类枚举类的基类的最佳方法是什么。我希望能够创建不同的具体类型,而不必重新编写 getter 方法的代码。
public enum Tool extends Item
{
Pickaxe("Pickaxe", 101),
Saw("Saw", 201);
}
并且 Tool.getNames() 将返回 Tool 类中所有项目名称的列表。
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;
}
}
我知道这不可能,但我该如何处理这种情况?我希望能够像访问枚举一样访问每个类的成员:Tool.Pickaxe。
最佳答案
你必须自己实现它,你不能扩展已经实现的行为。但是,您可以强制自己或其他任何人实现各种方法:
public interface Item {
public int getId();
public String getName();
}
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;
}
}
这是第一部分,现在您不想通过枚举“实例”本身访问 getIds()
和 getNames()
,但您想要访问它们通过类作为静态函数。
我希望这已经对你有足够的帮助,但它远未完成,使用泛型甚至可能有更简单的方法,但请理解枚举不能扩展任何东西。
关于java - Java 中的枚举基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820671/
我是一名优秀的程序员,十分优秀!