gpt4 book ai didi

java - Java 中的枚举基类

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:51 24 4
gpt4 key购买 nike

将其用作类枚举类的基类的最佳方法是什么。我希望能够创建不同的具体类型,而不必重新编写 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com