具有功能接口(interface)参数类型的 Java 通用方法

标签 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 ) );
   }

}

所以我在控制台上收到这个:

..\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/

相关文章:

java - 读取包含大括号、方括号等特殊符号的 Json 数据

java - "Type mismatch"将 Java 泛型与通配符一起使用时

c - 在c中实现通用堆栈

java - 使方法返回类型泛型

C++ lambda表达式类中的变量

haskell - Church naturals、求幂函数和类型检查

c++ - 如何使 lambda 与 std::nullopt 一起工作

java - 如何解决 install4j 中的 java.lang.NoClassDefFoundError

java - 关于循环和中断命令的问题

java - WinRM(WsMan) 和 NTLM 身份验证