小编Sha*_*per的帖子

为什么 compose() 需要显式转换,而 andThen() 不需要?

我正在研究功能组合并有一个例子:

Function<String, String> test = (s) -> s.concat("foo");
String str = test.andThen(String::toUpperCase).apply("bar"); 
Run Code Online (Sandbox Code Playgroud)

该示例按预期编译并运行。但是,如果我使用 更改组合的顺序compose(),则需要显式转换:

String str = test.compose((Function <String, String>) 
                          String::toUpperCase).apply("bar"); 
Run Code Online (Sandbox Code Playgroud)

如果没有显式转换String::toUpperCaseFunction <String, String>,则会出现编译器错误:

Error:
incompatible types: cannot infer type-variable(s) V
    (argument mismatch; invalid method reference
      incompatible types: java.lang.Object cannot be converted to java.util.Locale)
String s = test.compose(String::toUpperCase).apply("bar");
           ^-------------------------------^
Run Code Online (Sandbox Code Playgroud)

问题是为什么compose()需要显式强制转换,而andThen()在这种情况下不需要?

java function-composition java-8

16
推荐指数
1
解决办法
793
查看次数

标签 统计

function-composition ×1

java ×1

java-8 ×1