[英]Populating a DropDown from an Array returned by Javascript and Java
[英]Java - Populating an array from a constructor
我已经有一段时间没有接触Java了,对此我有些困惑。
我有一个“ Foo”类,其中有一个私有数组,其大小为5。
在类构造函数中,我需要传递这5个整数,所以我有这样的内容
public class Foo{
int [] numbers = new int[5];
Foo (int n0, int n1, int n2, int n3, int n4) {
numbers[0] = n0;
numbers[1] = n1;
numbers[2] = n2;
numbers[3] = n3;
numbers[4] = n4;
}
这似乎是太多的工作,并且有一种更简单的方法可以完成,我只是不了解它。 诸如for循环之类的东西仅限于数组长度,例如
Foo(int n0, int n1, int n2, int n3, int n4, int s0, int s1) {
for ( int i = o; i<= numbers.length; i++ ) {
numbers[i]= "n + i"; // This is wrong, but just to get the idea.
}
}
答案在某种程度上取决于您的解决方案的上下文。
如果这5个整数来自同一域,并且打算成为一个组的一部分,那么我建议您传递一个代表该组的参数,而不是传递5个单独的项。 Java提供了很好的机制来动态创建各种集合。
一些潜在的“群体”可能是:
public Foo(IntStream values) { ... }
new Foo(Stream.of(1, 3, 5, 7, 9));
public Foo(int[] values) { ... }
new Foo(new int[]{1, 3, 5, 7, 9});
public Foo(int... values) { ... }
new Foo(1, 3, 5, 7, 9);
public Foo(List<Integer> values) { ... }
new Foo(Arrays.asList(1, 3, 5, 7, 9));
所有这些都提供了检查大小的方法,或者将其截断并转换为所需的任何内部格式。 如果您希望发送的值数量有所变化,这将需要最小的更改。 对特定值进行硬编码将意味着在值的数量更改时,构造函数的签名也会更改。
另一方面,如果参数不在同一个域中,但实际上代表可区分的属性,则将它们作为单独的参数提供给构造函数是有意义的。 但是,在这种情况下,将它们内部存储为一个集合没有太大意义,因此您可能需要使用标准的this.bar = bar
图案将值存储在单独的变量中。
我认为构造函数不应视为在数据结构内插入(添加)对象的函数。 如果要这样做,我会写这样的东西:
Foo(int size) {
this.numbers = new int[size];
}
void insert(int n, int location) {
numbers[location] = n;
}
然后,您可以使用循环从客户端程序(主程序)中插入并使用变量i
(用于循环计数器)分配location
。 那是我的建议。
注意:您可能需要以某种方式在代码中处理array out of bounds
错误的可能性。
尝试这个。
Foo(int... n) {
if (n.length != 5)
throw new IllegalArgumentException("specify 5 ints");
for (int i = 0; i < 5; ++i)
numbers[i] = n[i];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.