我看到有一个实用程序来创建Function<A,C>
,这是Function<A,B>
的组成和Function<B,C>
番石榴函数组合
我有一个类似的,但有点不同的情况。
我的第一个函数是valueOfFunction
,它根据我的BO
类中的键返回一个枚举。
SECOND函数使用参数(即BO
对象)调用Enum上的方法。
所以它不是完全A->B->C
这里的功能:
private final static class RequestConvertor implements Function<CoreData, List<Request>> {
private final static Function<String,RequestConvertorEnum> typeConvertor = valueOfFunction(RequestConvertorEnum.class);
@Override
public List<Request> apply(CoreData coreData) {
RequestConvertorEnum requestConvertorEnum = typeConvertor.apply(coreData.getType());
return requestConvertorEnum.convertToRequests(coreData);
}
}
这里枚举的方法:
private final List<Request> convertToRequests(CoreData coreData) {
List<PropertyWrapper> properties = getProperties(coreData);
if (properties.size() == 0) {
return Collections.emptyList();
}
Request request = new Request(coreData.getKey(), properties, new RequestMetaData(
coreData.getFoo()));
return newArrayList(request);
}
是否有构成这两个功能在一起更好的方式?
谢谢。我知道转换为Enum可能存在的异常。字符串类型是我们从DB获得的东西,我更喜欢将它传递并仅在需要时才转换为Enum。感谢收集的意见。我认为我们可以使用不可变列表。 – 2012-01-13 10:29:23
字符串 - >枚举常量将只在需要时在RequestConvertor的apply方法中完成 - 您将调用'valueOfFunction.apply'方法,而我将调用'Enum.valueOf'静态方法,而不创建第二个Function对象。 – Xaerxess 2012-01-13 10:51:24