2
鑑於我有以下的結構已經存在:如何在靜態助手類中聲明函數接口?
private void acceptInner(final Path path) throws IOException {
String newId = FileUtils.readAndModifyFileEntry(StageRename.ID_FILE, "id",
idString -> String.valueOf(Integer.parseInt(idString) + 1));
BaseUtils.moveKeepExtension(path, StageRename.OUTPUT_DIRECTORY, newId);
}
凡FileUtils.readAndModifyFileEntry
聲明爲:
public static String readAndModifyFileEntry(final Path path, final String entryKey
, final UnaryOperator<String> operator) throws IOException { ... }
現在我想移動由一個增加一個字符串值作爲整數操作,以一個新的輔助類,我已經提出了兩點建議:
final public class MapperUtils {
private MapperUtils() {
throw new UnsupportedOperationException();
}
public static String incrementAsInt(final String input) {
return String.valueOf(Integer.parseInt(input) + 1);
}
public static UnaryOperator<String> incrementAsIntOperator() {
return input -> String.valueOf(Integer.parseInt(input) + 1);
}
}
哪一個會更好,利用低於:
String newId = FileUtils.readAndModifyFileEntry(StageRename.ID_FILE, "id",
MapperUtils::incrementAsInt);
與
String newId = FileUtils.readAndModifyFileEntry(StageRename.ID_FILE, "id",
MapperUtils.incrementAsIntOperator());
或者我應該保持兩者兼而有之?
後者的優點之一是我可以鏈接運營商andThen()
或compose()
,但是它有什麼缺點嗎?
更多的參考,我可以使用以下命令:
((UnaryOperator<String>)MapperUtils::incrementAsInt).andThen(/*something*/)
要手動將其轉換爲運營商,但它確實長相醜陋。但是,如果我提供這兩種方法,是否會在代碼庫上創建不需要的方法爆炸?