Guava toStringFunction()具有以下声明:
public static Function toStringFunction() { ... }
Object的所有非原始根,因此该函数运行良好.
但是当我尝试用另一个函数组合它时,例如:
Function f1 = Functions.compose(Functions.forMap(someMap),
Functions.toStringFunction());
someMap变量是map< String,Double>,所以我希望toStringFunction将Integer转换为String,然后forMap将String转换为Double.
但是我收到编译错误:
Function f1 = Functions.compose(Functions.forMap(someMap),
^
required: Function
found: Function
2 errors
我的两个问题是:
1.具体告诉编译器toStringFunction应该是Function?一个简单的演员不会起作用,我正在寻找这两个函数的真实组合.
Function< Integer, String> g1 = (Function< Integer, String>)Functions.toStringFunction();
// cause error
2.将toStringFunction写成如下:
@SuppressWarnings("unchecked")
public static Function toStringFunction(){
return (Function) ToStringFunction.INSTANCE;
}
// enum singleton pattern
private enum ToStringFunction implements Function{
INSTANCE;
// @Override public String toString(){
// return "Functions.toStringFunction()";
// }
@Override public String apply(Object o){
return o.toString();
}
}
我可以指定类型:
Function f1 = Functions.compose(Functions.forMap(someMap),
Functions.toStringFunction());
这很好用.但番石榴团队现在拥有的版本的动机是什么?