Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正确的编程实践_Java - Fatal编程技术网

Java 正确的编程实践

Java 正确的编程实践,java,Java,一般来说,问题是如何将ItemStacks列表传递给类的方法,这样我就不必传递20个不同的ItemStacks。ItemStack定义如下: 那么,如何创建ItemStacks的列表或数组呢 ItemStack stack1 = new ItemStack(); ItemStack stack2 = new ItemStack(); 不起作用,但需要: ItemStack[] stacks = new ItemStack[]; stacks = {stack1, stack2}; publi

一般来说,问题是如何将ItemStacks列表传递给类的方法,这样我就不必传递20个不同的ItemStacks。ItemStack定义如下:

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

ItemStack stack1 = new ItemStack();
ItemStack stack2 = new ItemStack();
不起作用,但需要:

ItemStack[] stacks = new ItemStack[];
stacks = {stack1, stack2};
public void doSomethingMethod(ItemStack... arrayOfItemStacks) {
    for (ItemStack itemStack : arrayOfItemStacks) {
        // Do something with itemStack
    }
}

(...)

doSomethingMethod(itemStack1, itemStack2);

ItemStack[] itemStacks = new ItemStack[100];
// Assign 100 ItemStacks to itemStacks
doSomethingMethod(itemStacks);
因此,我可以:

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
    }
}
公共类SomeClass{
//您可以在这里实例化
ArrayList堆栈=新的ArrayList();
//但是你不能在这里赋值
stack.add(无论什么);//这会产生一个错误
void方法(){
stack.add(无论什么);//这个很好用
}
}

这个问题仍然不是很清楚,但我相信您正在寻找的是。Varargs允许您将任意数量的同一类传递给一个方法,以便它们在该方法中作为数组可用。例如:

public void doSomethingMethod(String... arrayOfStrings) {
    for (String string : arrayOfStrings) {
        // Do something with the string
    }
}
可以使用任意数量的字符串(包括零)调用上述方法,增强的for循环将对传递的每个字符串执行某些操作。这些字符串可以是字符串变量、字符串文字甚至字符串数组:

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.
方法声明中
字符串
后面的“…”是一种魔力,它允许您使用同一类的任意数量的参数。要为您的ItemStacks执行此操作,应该如下所示:

ItemStack[] stacks = new ItemStack[];
stacks = {stack1, stack2};
public void doSomethingMethod(ItemStack... arrayOfItemStacks) {
    for (ItemStack itemStack : arrayOfItemStacks) {
        // Do something with itemStack
    }
}

(...)

doSomethingMethod(itemStack1, itemStack2);

ItemStack[] itemStacks = new ItemStack[100];
// Assign 100 ItemStacks to itemStacks
doSomethingMethod(itemStacks);

我不明白你的伪代码的意图。您可以展示实际的Java代码吗?(非主题建议):类的Java命名约定是
UppercaseStartingCamelCase
,因此您应该命名事物
WhateverController
WhateverModel
。方法写为
lowercaseStartingCamelCase()
。我觉得文本和代码是针对两个不同的问题的。也许是我,但这让我很困惑。你能为我们澄清你的问题和你的代码吗?请浏览、和部分,了解此网站的工作原理,并帮助您改进当前和未来的问题。谢谢Greg,我不知道,但从现在开始会这样做。您的建议非常受欢迎,因为我仍在适应Java。即使在编辑之后,
ItemStack
在代码中的任何地方都没有提到。请尝试发布所有相关内容,以便回答问题。这正是我试图做的,但我没有使用类型字符串,而是尝试对类型ItemStack执行相同的操作,但是它对ItemStack不起作用,因此我需要解决这一问题。本质上,我需要一种方法来创建ItemStack数组。为什么它不能与ItemStack一起工作?应该这样。只需将字符串替换为ItemStack。您能否提供一个将ItemStack添加到ItemStack数组的工作示例?我尝试的每一种方法都失败了。我编辑了示例以使用ItemStacks。应该没有什么区别。String和ItemStack都是对象,在数组中的行为应该相同,唯一的例外是可以有字符串文本,但不能有ItemStack文本。我尝试过,但没有“[100]”。将再试一次,但上次我尝试时,没有办法添加。例如itemStacks.add或itemStacks=+stack1。也许这是因为我在“newitemstack[100]”中没有100。