mar*_*tan 0 java generics lambda
我不明白为什么这段代码不能编译:
package Desktop;
import java.util.function.*;
public class MyClass {
public static <T, U> Long myMethod( Function<T, U> methodParam ) {
return methodParam.apply("Today is happy day!");
}
public static void main(String[] args) {
System.out.println( <String, Long>myMethod( Long::valueOf ) );
}
}
Run Code Online (Sandbox Code Playgroud)
所以我在控制台上收到了这个:
..\Desktop\MyClass.java:15: error: illegal start of expression
System.out.println( <String, Long>myMethod( Long::valueOf ) );
^
..\Desktop\MyClass.java:15: error: ';' expected
System.out.println( <String, Long>myMethod( Long::valueOf ) );
^
2 errors
Run Code Online (Sandbox Code Playgroud)
我期望使用泛型在方法参数上包含 lambda 的类型。
它应该是:
public static <T, U> U myMethod(Function<T, U> methodParam, T t) {
return methodParam.apply(t);
}
public static void main(String[] args) {
System.out.println(myMethod(Long::valueOf, "Today is happy day!") );
}
Run Code Online (Sandbox Code Playgroud)
myMethod接受Function带有泛型参数的 a ,因此您不能总是apply使用String参数调用其方法并期望它返回 a Long。
相反,您可以将String参数传递给它,并将其返回类型更改为U.
当然,这段代码会抛出 a NumberFormatException,因为你不能将它转换String为 a Long。