我看到有一個實用程序來創建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