方法/构造函数中的ArrayList - Java

Kyk*_*yky 4 java arraylist

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

Ps:对不起突出,我不知道如何在这里使用它.

我有一个构造函数:

public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试创建直接在其上创建ArrayLists()的Object时,它不起作用:

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) }
                );
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Sea*_*oyd 6

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
);
Run Code Online (Sandbox Code Playgroud)

或使用Guava框架提供的工厂方法:

public static WeaponsData AngelicAxe = new WeaponsData(
    Lists.newArrayList(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);
Run Code Online (Sandbox Code Playgroud)

当然,如果你使用Guava,你应该使用一个不可变的集合,因为你显然试图实现一个常量:

public static final WeaponsData ANGELIC_AXE = new WeaponsData(
    ImmutableList.of(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);
Run Code Online (Sandbox Code Playgroud)