本文介绍了如何从Callable()返回对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从call()返回一个二维数组,我遇到了一些问题。到目前为止,我的代码是:

I'm trying to return a 2d array from call(), I'm having some issues. My code so far is:

//this is the end of main
Thread t1 = new Thread(new ArrayMultiplication(Array1, Array2, length));
t1.start();
}

    public int[][] call(int[][] answer)
    {

    int[][] answer = new int[length][length];

    answer = multiplyArray(Array1, Array2, length); //off to another function which returns the answer to here

    return answer;
    }

此代码编译,这不会返回我的数组。我确定我可能使用了错误的语法,但我找不到任何好的例子。

This code compiles, this is not returning my array. I'm sure I'm probably using the wrong syntax, but I can't find any good examples.

编辑:改了一下

推荐答案

添加到Joseph Ottinger的答案,要传递要在Callable的call()方法中使用的值,你可以使用闭包:

Adding to Joseph Ottinger's answer, to pass values to be used inside Callable's call() method, you can use closures:

    public static Callable<Integer[][]> getMultiplierCallable(final int[][] xs,
            final int[][] ys, final int length) {
        return new Callable<Integer[][]>() {
            public Integer[][] call() throws Exception {
                Integer[][] answer = new Integer[length][length];
                answer = multiplyArray(xs, ys, length);
                return answer;
            }
        };
    }

    public static void main(final String[] args) throws ExecutionException,
            InterruptedException {
        final int[][] xs = {{1, 2}, {3, 4}};
        final int[][] ys = {{1, 2}, {3, 4}};
        final Callable<Integer[][]> callable = getMultiplierCallable(xs, ys, 2);
        final ExecutorService service = Executors.newFixedThreadPool(2);
        final Future<Integer[][]> result = service.submit(callable);
        final Integer[][] intArray = result.get();
        for (final Integer[] element : intArray) {
            System.out.println(Arrays.toString(element));
        }
    }

这篇关于如何从Callable()返回对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 17:38