链接功能接口 - IntUnaryOperator 与 UnaryOperator
Chaining Functional Interfaces - IntUnaryOperator vs UnaryOperator
我还在学习函数式接口。我想知道为什么我能够将 UnaryOperator
链接到 Function
的末尾,但不能将 IntUnaryOperator
链接到同一函数的末尾。
UnaryOperator <String> twoOfMe = s -> s + s;
Function <String, Integer> convertMe = s -> Integer.parseInt (s);
UnaryOperator <Integer> twiceMe = n -> 2*n;
IntUnaryOperator doubleMe = n -> 2*n;
int a = twoOfMe.andThen(convertMe).andThen(twiceMe).apply ("2");
int b = twoOfMe.andThen(convertMe).andThen(doubleMe).apply ("2");
int a
适用于 twiceMe
但 int b
不适用于 doubleMe
.
谢谢
编辑:
它说不兼容的类型。必需的整数。找到 java.lang.Object
andThen(Function<? super R, ? extends V> after)
需要一个 Function
参数。 UnaryOperator<Integer>
是Function<Integer,Integer>
的子接口,匹配。 IntUnaryOperator
与 Function
接口无关,因此 doubleMe
无法传递给 andThen
。
如果你看一下 IntUnaryOperator
class 你会发现它没有扩展任何接口,另一方面 UnaryOperator
确实扩展了 Function
接口.
您提供的代码不适用于 IntUnaryOperator
,因为它期望 Function
而不是 IntUnaryOperator
的真正含义。
这是因为 IntUnaryOperator
将 int
映射到 int
,而函数 <String, Integer> convertMe
返回的是 Integer
,而不是 int
.你不能链接它们。
您可以声明 ToIntFunction<String> convertMe = Integer::parseInt;
,然后您可以链接它们。
UnaryOperator<String> twoOfMe = s -> s + s;
ToIntFunction<String> convertMe = Integer::parseInt;
IntUnaryOperator doubleMe = n -> 2*n;
int b = twoOfMe.andThen(convertMe).andThen(doubleMe).apply ("2");
我还在学习函数式接口。我想知道为什么我能够将 UnaryOperator
链接到 Function
的末尾,但不能将 IntUnaryOperator
链接到同一函数的末尾。
UnaryOperator <String> twoOfMe = s -> s + s;
Function <String, Integer> convertMe = s -> Integer.parseInt (s);
UnaryOperator <Integer> twiceMe = n -> 2*n;
IntUnaryOperator doubleMe = n -> 2*n;
int a = twoOfMe.andThen(convertMe).andThen(twiceMe).apply ("2");
int b = twoOfMe.andThen(convertMe).andThen(doubleMe).apply ("2");
int a
适用于 twiceMe
但 int b
不适用于 doubleMe
.
谢谢
编辑: 它说不兼容的类型。必需的整数。找到 java.lang.Object
andThen(Function<? super R, ? extends V> after)
需要一个 Function
参数。 UnaryOperator<Integer>
是Function<Integer,Integer>
的子接口,匹配。 IntUnaryOperator
与 Function
接口无关,因此 doubleMe
无法传递给 andThen
。
如果你看一下 IntUnaryOperator
class 你会发现它没有扩展任何接口,另一方面 UnaryOperator
确实扩展了 Function
接口.
您提供的代码不适用于 IntUnaryOperator
,因为它期望 Function
而不是 IntUnaryOperator
的真正含义。
这是因为 IntUnaryOperator
将 int
映射到 int
,而函数 <String, Integer> convertMe
返回的是 Integer
,而不是 int
.你不能链接它们。
您可以声明 ToIntFunction<String> convertMe = Integer::parseInt;
,然后您可以链接它们。
UnaryOperator<String> twoOfMe = s -> s + s;
ToIntFunction<String> convertMe = Integer::parseInt;
IntUnaryOperator doubleMe = n -> 2*n;
int b = twoOfMe.andThen(convertMe).andThen(doubleMe).apply ("2");