如何从静态函数 return 函数接口?
How to return a Function Interface from a static function?
我在静态方法中使用 Function<String, String>
,该方法预期 return 一个值
它接受一个输入,return一个输出,如何return从该方法返回值?
public static String getAnimalName(String name)
{
Function<String, String> getNameFunc = (inputName)->
{
return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
};
return "";
}
接口 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<String, String>
,但没有使用它。另外我不确定你传递给函数的参数的目的是什么。
根据您的代码,我确定了三个有意义的变体,但根据您的问题标题,我认为您正在寻找解决方案 1。
Return a 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");
保留参数,但 return 一个 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();
Return a String
(和你原来做的一样)并删除中间的 Function<String, String>
public static String getAnimalName(String name)
{
return name.equalsIgnoreCase("cat") ? "dog" : "rat";
}
然后在其他一些代码中..
String name = getAnimalName();
我不确定您尝试实现的是三个中的哪一个,但我希望这能对问题有所启发。
我在静态方法中使用 Function<String, String>
,该方法预期 return 一个值
它接受一个输入,return一个输出,如何return从该方法返回值?
public static String getAnimalName(String name)
{
Function<String, String> getNameFunc = (inputName)->
{
return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
};
return "";
}
接口 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<String, String>
,但没有使用它。另外我不确定你传递给函数的参数的目的是什么。
根据您的代码,我确定了三个有意义的变体,但根据您的问题标题,我认为您正在寻找解决方案 1。
Return a
中删除参数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");
保留参数,但 return 一个
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();
Return a
String
(和你原来做的一样)并删除中间的Function<String, String>
public static String getAnimalName(String name) { return name.equalsIgnoreCase("cat") ? "dog" : "rat"; }
然后在其他一些代码中..
String name = getAnimalName();
我不确定您尝试实现的是三个中的哪一个,但我希望这能对问题有所启发。