功能接口映射的正确键入 (Java 8)

Correct Typing for a map of functional interfaces (Java 8)

我正在尝试将字符串映射存储到 HashMap 中的函数,但我正在努力确保输入正确。如何存储由通用功能接口定义的不同类型的功能?

这里是相关代码。

@FunctionalInterface
public interface Converter<F,T> {
    T convert(F from);
}

 HashMap<String, Converter<?, ?>> fooMapping= new HashMap<String, Converter<?, ?>>();

 fooMapping.put("name", (someString) -> someString);
 fooMapping.put("flavor", (someInt) -> someAge + 1);

最后两行没有编译并出现以下(明显的)错误:

-方法 length() 未定义类型 Object
- 运算符 + 对于参数类型 Object 是未定义的,int

所以我的问题是,当我将 lamda 存储在我的哈希图中时,如何指定 Converter 的类型 F 和 T,这样我就不会被迫从 Object 转换所有内容?

指定lambda参数的类型(F)

fooMapping.put("name", (String someString) -> someString.length());
fooMapping.put("flavor", (Integer someInt) -> someInt + 1);

return 类型 (T) 将从 lambda 主体表达式的类型推断出来。