0

对于更具可读性的代码,这更像是一个假设性问题。除了有另一个函数来返回数组之外,有没有更优雅的方式来做这样的事情?我在编写 JUnit 测试时多次遇到过这段代码,这只是一个眼睛疼。我有 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};
4

4 回答 4

1

这在函数式编程中是众所周知的。使用最高版本 7 的基本 Java(这是一种命令式语言),这是不可能的。然而,有一些方法可以做到这一点。

最简单的方法可能是学习如何使用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));
于 2013-11-04T14:58:13.027 回答
-1

尝试 Arrays.fill(Object[] a,Object val):http ://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html

于 2013-11-04T14:48:40.193 回答
-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]);
于 2013-11-04T14:53:45.570 回答
-1

Arrays.fill(ArrayOfObjects, ObjectA);

于 2013-11-04T14:54:02.603 回答