在google上搜索后,我找不到答案,我对Java不太熟悉,我大多数时候都使用C#,并且我知道使用C#是可以做到的,并且可能是在Java中。

附言:对不起,精彩集锦,我不知道该如何使用。

我有一个构造函数:

public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }

然后,当我尝试创建直接在其上创建ArrayLists()的对象时,它不起作用:
public static WeaponsData AngelicAxe = new WeaponsData(new ArrayList<NPC>() { new NPC("Rat", "None", 0), new NPC("Dog", "None", 0) },
                new ArrayList<NPC>() { new NPC("Player", "All", 0) },
                new ArrayList<NPC>() { new NPC("Cain", "First", 5000) }
                );

没有办法在Java上做到这一点?

谢谢

最佳答案

ArrayList没有执行此操作所需的构造函数。您可以将参数包装在对Arrays.asList()的调用中:

public static WeaponsData AngelicAxe = new WeaponsData(
    new ArrayList<NPC>(
       Arrays.asList(
          new NPC("Rat", "None", 0),
          new NPC("Dog", "None", 0)
       )
    ),
// etc
);

或使用Guava Framework提供的工厂方法:
public static WeaponsData AngelicAxe = new WeaponsData(
    Lists.newArrayList(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);

当然,如果您使用Guava,则应该改用不可变集合,因为您显然正在尝试实现常量:
public static final WeaponsData ANGELIC_AXE = new WeaponsData(
    ImmutableList.of(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);

09-11 18:59
查看更多