我有一个可以调用的方法数组,需要一个布尔值作为参数。我试过这个:
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
};
}
答案 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;
}
}