鉴于我已经存在以下结构:
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()
or链接运算符compose()
,但它有什么缺点吗?
如需更多参考,我可以使用以下内容:
((UnaryOperator<String>)MapperUtils::incrementAsInt).andThen(/*something*/)
手动将其转换为操作员,但它确实看起来很难看。但是,如果我同时提供两者,它是否会在代码库上创建不需要的方法爆炸?