对于稍微更易读的代码,这更像是一个假设性问题。除了有另一个函数返回数组之外,还有更优雅的方式做这样的事吗?在编写JUnit Tests时,我已经多次遇到过这段代码,这只是一个眼睛疼痛。我有10个函数来生成特定类型的随机数组,它非常混乱。
public ObjectA getA()
{
return new ObjectA("random", "stuff", "constructor");
}
public void doStuffWithA(ObjectA objs[])
{
// do stuff with loop / array
}
public void main()
{
ObjectA objs[] = new ObjectA[10];
for (int x = 0; x < objs.length; x ++)
objs[x] = getA();
doStuffWithA(objs);
}
也许更清洁的东西:
doStuffWithA(toArray(getA(), 10));
但是传递实际的函数调用似乎不可能。 即使这样也是可以接受的:
ObjectA objs[] = new ObjectA[10]{getA(), 10};
答案 0 :(得分:1)
这在函数式编程中是众所周知的;使用基本Java(这是一种命令式语言)直到版本7,它是不可能的。然而,有很多方法可以做到这一点。
最简单的方法可能是学习如何使用lambdaj。这将有点复杂,但使用它你将能够构建一个可以传递给你的函数的生成器,并将根据你的需要创建对象。
另一种可能的方法是手动编写一个生成给定函数的生成器类;界面看起来像这样:
public interface Generator<T> {
T generate();
T[] generateSeveral(int);
}
然后你可以有一个这样的实现:
class ObjectAGenerator implements Generator<ObjectA> {
public ObjectA generate() {
return new ObjectA("random", "stuff", "constructor");
}
public ObjectA[] generateSeveral(int amount) {
ObjectA[] result = new ObjectA[amount];
for(int i=0; i<amount; i++) {
result[i] = generate();
}
}
}
你可以像这样使用它:
doStuffWithA(new ObjectAGenerator().generateSeveral(10));
答案 1 :(得分:-1)
尝试Arrays.fill(Object [] a,Object val):http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html
答案 2 :(得分:-1)
Arrays.fill
会帮助你。
你可以这样做
ObjectA objs[] = new ObjectA[10];
Arrays.fill(objs, getA());
//just printing objects
for (int x = 0; x < objs.length; x ++)
System.out.println(objs[x]);
答案 3 :(得分:-1)
Arrays.fill(ArrayOfObjects,ObjectA);