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

时间:2015-01-19 16:56:16

标签: java generics java-8 lambda

我试图在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);

最后两行不会使用以下(明显)错误进行编译:

- 方法长度()未定义类型对象
- 对于参数类型Object,int

,运算符+未定义

所以我的问题是当我将lamda存储在我的hashmap中时如何指定转换器的TYPES F和T所以我不会强制从Object转换所有内容?

1 个答案:

答案 0 :(得分:5)

指定lambda参数的类型(F

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

返回类型(T)将从lambda body表达式的类型中推断出来。