Java:返回函数数组

时间:2016-05-02 10:17:17

标签: java

我有一个可以调用的方法数组,需要一个布尔值作为参数。我试过这个:

public class Example {
    public Function<Boolean, Integer> getFunctions(boolean t) {
        return new Function[] {
            this::magicNumber
        };
    }

    public int magicNumber(boolean t) {
        return (t) ? new Random().nextInt(11) : 0;
    }
}

然后编译器返回带有消息

的错误消息
Incompatible types: invalid method reference
    Incompatible types: Object cannot be converted to boolean

上面的例子可以通过将Function存储在变量中并返回它来工作,但是我找不到这个干净的代码并且它是多余的。

public class Example {
    public Function<Boolean, Integer> getFunctions(boolean t) {
        Function<Boolean, Integer> f = this::magicNumber;

        return new Function[] {
            f
        };
    }

    public int magicNumber(boolean t) {
        return (t) ? new Random().nextInt(11) : 0;
    }
}

有没有办法缩短上面的代码,就像开头的例子一样?

修改

作为一名评论者的要求,我将举例说明我如何在之前的项目中使用过供应商。我在数组中返回它们以返回对象。问题是这个项目取决于有一个参数。

public Supplier<T>[] getRecipes()
{
    return new Supplier[] {
        this::anchovyRule,
        this::codRule,
        this::herringRule,
        this::lobsterRule,
        this::mackerelRule,
        this::pikeRule,
        this::salmonRule,
        this::sardineRule,
        this::shrimpRule,
        this::troutRule,
        this::tunaRule
    };
}

1 个答案:

答案 0 :(得分:3)

如此返回List<Function<Boolean, Integer>>

public class Example {
    public List<Function<Boolean, Integer>> getFunctions(boolean t) {
        return Arrays.asList(
            this::magicNumber
        );
    }

    public int magicNumber(boolean t) {
        return (t) ? new Random().nextInt(11) : 0;
    }
}