我不明白为什么这段代码不能编译:
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 ) );
}
}
所以我在控制台上收到这个:
..\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
我希望使用泛型来包含方法参数的 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!") );
}
myMethod
接受带有泛型参数的 Function
,因此您不能总是使用 String
调用其 apply
方法code> 参数并期望它返回一个 Long
。
相反,您可以向其传递 String
参数,并将其返回类型更改为 U
。
当然,此代码会抛出 NumberFormatException
,因为您无法将该 String
转换为 Long
。
关于具有功能接口(interface)参数类型的 Java 通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927071/