将List作为参数传递给Enum

时间:2018-03-20 00:24:18

标签: java enums

public enum Character
{
LAURA("Laura", Item.SANDWICH,0.0f), SALLY("Sally", Item.CRISPS,0.1f), 
ANDY("Andy", Item.DRINK,0.2f), ALEX("Alex", null,0.3f);

private String description;
private Item item;
private float probability;
ArrayList<Item> itemsLaura = new ArrayList<>();
ArrayList<Item> itemsSally = new ArrayList<>();
ArrayList<Item> itemsAndy = new ArrayList<>();
ArrayList<Item> itemsAlex = new ArrayList<>();
/**
 * Constructor initialising description,item and probability.
 */
private Character(String desc, Item it,float moveProbability)
{
    itemsLaura.add(Item.SANDWICH);
    itemsSally.add(Item.CRISPS);
    itemsAndy.add(Item.DRINK);
    itemsAlex.add(null);
    item = it;
    probability =moveProbability;
}

我有上面的字符枚举,我需要更改它,而不是每个字符都有一个项目,他们有一个项目列表。我该怎么做?

我为每个角色创建了ArrayLists,但我不知道如何将它们作为参数传递给枚举角色。

1 个答案:

答案 0 :(得分:0)

不是使用List<Item>,而是使用varargs可以获得可变数量的Item,但首先应该将moveProbability交换为第二个参数(因为varargs参数必须是最后一个元素)。你的签名最终会像这样:

private Character(String desc, float moveProbability, Item... items) {
    ...
}

然后您可以更改:

private Item item;

private Item[] items;

并在构造函数中包含以下内容:

this.items = items;

这将允许您的枚举值采用多个Item s:

LAURA("Laura", 0.0f, Item.SANDWICH, Item.DRINK, Item.CRISPS)