在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.
);