我现在还没有触及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.
}
}
答案 0 :(得分:3)
答案在某种程度上取决于您的解决方案的背景。
如果5个整数来自同一个域并且打算成为组的一部分,那么我建议传递一个表示该组的参数而不是5个单独的项。 Java提供了很好的机制来动态创建各种集合。
一些潜在的&#39;群组&#39;可能是:
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
模式将值存储在单独的变量中。
答案 1 :(得分:2)
我认为构造函数不应该被视为在数据结构中插入(添加)对象的函数。如果我这样做,我会写这样的东西:
Foo(int size) {
this.numbers = new int[size];
}
void insert(int n, int location) {
numbers[location] = n;
}
然后,您可以使用循环从客户端程序(main)插入,并为location
分配变量i
(for循环计数器)。多数民众赞成我的建议。
注意:您可能需要在代码中以某种方式处理array out of bounds
错误的可能性。
答案 2 :(得分:-1)
试试这个。
Foo(int... n) {
if (n.length != 5)
throw new IllegalArgumentException("specify 5 ints");
for (int i = 0; i < 5; ++i)
numbers[i] = n[i];
}