功能接口映射的正确键入 (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 主体表达式的类型推断出来。
我正在尝试将字符串映射存储到 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 主体表达式的类型推断出来。