适当的编程实践

时间:2015-09-28 22:28:45

标签: java

通常问题是如何将ItemStacks列表传递给类的方法,所以我不必传递20个不同的ItemStack。 ItemStack在此处定义:https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemStack.html

那么,如何创建ItemStacks的列表或数组呢?

ItemStack stack1 = new ItemStack();
ItemStack stack2 = new ItemStack();

不起作用,但需要:

ItemStack[] stacks = new ItemStack[];
stacks = {stack1, stack2};

所以我可以:

DisplayInventory.open(stacks);

而不是:

DisplayInventory.open(stack1, stack2);

解决。

我的问题是我试图在方法之外执行任务。

public class SomeClass {
    // you can instantiate here
    ArrayList<ItemStack> stack = new ArrayList<>();
    // but you cannot assign here
    stack.add(whatever); // this produces an error

    void method() {
        stack.add(whatever); // this works just fine
    }
}

1 个答案:

答案 0 :(得分:0)

问题仍然不是很明确,但我相信你所寻找的是Varargs。 Varargs允许您将任意数量的相同类传递给方法,以便它们在该方法中作为数组使用。例如:

ReadOnlyCollection<IWebElement> element = driver.FindElements(By.Id("sampleId"));
if (element.Count != 0)
{
    // page loaded properly
}

上述方法可以使用任意数量的字符串调用,包括零,并且增强的for循环将对传递的每个字符串执行某些操作。这些字符串可以是字符串变量,字符串文字甚至是字符串数组:

public void doSomethingMethod(String... arrayOfStrings) {
    for (String string : arrayOfStrings) {
        // Do something with the string
    }
}

但是,它不适用于集合。它们必须转换为数组。

doSomethingMethod();  // Works, but does nothing
doSomethingMethod("John"); // Does something with John
doSomethingMethod("John", "Steve"); // Does something with John and Steve
String[] names = new String[100];
for (int i=0; i < 100; i++) {
    // add names into names
}
doSomethingMethod(names); // Does something with 100 names.

&#34; ...&#34;在方法声明中doSomethingMethod(myArrayList); // Does not compile doSomethingMethod(myArrayList.toArray(new String[0]); // Does something with every String // in myArrayList 之后是允许您使用同一类的任意数量参数的魔力。要为您的ItemStack执行此操作,它应该类似于:

String