如何从静态函数返回函数接口?
Posted
技术标签:
【中文标题】如何从静态函数返回函数接口?【英文标题】:How to return a Function Interface from a static function? 【发布时间】:2021-12-21 20:58:14 【问题描述】:我在预期返回值的静态方法中使用Function<String, String>
这接受一个输入并返回一个输出,如何从方法中返回值?
public static String getAnimalName(String name)
Function<String, String> getNameFunc = (inputName)->
return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
;
return "";
【问题讨论】:
更改您的函数以实际返回Function<String, String>
,然后返回return getNameFunc
(或return inputName -> inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
?
当您只是返回 String
时,为什么还要使用 Function
?
我认为这个问题不需要结束
【参考方案1】:
你在做什么没有多大意义。您在函数内声明 Function<String, String>
,但不使用它。另外我不确定你传递给函数的参数的目的是什么。
根据您的代码,我确定了三个有意义的变体,但根据您的问题标题,我假设您正在寻找解决方案 1。
返回一个Function<String, String>
并从getAnimalNameFunction
中删除参数
public static Function<String, String> getAnimalNameFunction()
Function<String, String> getNameFunc = (inputName) ->
return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
;
return getNameFunc;
然后在其他代码中..
Function<String, String> nameConverter = getAnimalNameFunction();
String name = nameConverter.apply("cow");
保留参数,但返回Supplier<String>
:
public static Supplier<String> getAnimalNameSupplier(String name)
Supplier<String> getNameSup = () ->
return name.equalsIgnoreCase("cat") ? "dog" : "rat";
;
return getNameSup;
然后在其他代码中..
Supplier<String> nameGetter = getAnimalNameSupplier("cow");
String name = nameGetter.get();
返回一个String
(就像你最初所做的那样)并删除中间的Function<String, String>
public static String getAnimalName(String name)
return name.equalsIgnoreCase("cat") ? "dog" : "rat";
然后在其他代码中..
String name = getAnimalName();
我不确定您尝试实现的三个中的哪一个,但我希望这能对问题有所了解。
【讨论】:
【参考方案2】:接口java.util.function.Function
包含一个名为apply
的抽象方法。因此,您需要显式调用该方法。
lambda expression 是接口的实际实现。
public static String getAnimalName(String name)
Function<String, String> getNameFunc = (inputName) ->
return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
;
return getNameFunc.apply(name);
请注意,您可以将 lambda 表达式简化为
Function<String, String> getNameFunc = inputName -> inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
【讨论】:
在这种情况下,为什么首先要创建一个 Function 对象,而不是简单地将整个getAnimalMethod
主体实现为 return name.equalsIgnoreCase("cat") ? "dog" : "rat";
?
@Abra 我觉得只是盲目地回答这个问题,而没有向 OP 暗示他们试图做的事情不是很明智,这违背了 SO 的精神以上是关于如何从静态函数返回函数接口?的主要内容,如果未能解决你的问题,请参考以下文章
简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)