gpt4 book ai didi

java - 将 getter/setter 作为方法引用传递

转载 作者:行者123 更新时间:2023-12-01 14:03:44 26 4
gpt4 key购买 nike

我有很多像这样的条目:

        if (update) {
if (activity.getName() == null) {
logger.debug(" Setting name on " + id);
} else
if (!activity.getName().equals(name)) {
logger.debug(" Updating name on " + id);
}
}
// if (!update) not logged on purpose
activity.setName(name);

if (update) {
if (activity.getPlannedDuration() == null) {
logger.debug(" Setting plannedDuration on " + id);
} else
if (!activity.getPlannedDuration().equals(duration)) {
logger.debug(" Updating plannedDuration on " + id);
}
}
// if (!update) not logged on purpose
activity.setPlannedDuration(duration);

出于代码可读性的目的,我想将它们替换为如下内容:

        updateField(update, name, "name", activity.getName, activity.setName);
updateField(update, duration, "plannedDuration", activity.getPlannedDuration, activity.setPlannedDuration);

我知道这是一个常见问题,我做了功课,并且 wraping methods to Callable interface似乎是最简单的解决方案。但是,该解决方案将比我当前的代码更加困惑(请记住,我这样做是为了提高可读性)。

那么,Java 中有没有一个优雅的解决方案来解决我的问题?

最佳答案

那么您可以将该特定代码重构为:

logUpdate(update, activity.getName(), name, "name", id);
activity.setName(name);

logUpdate(update, activity.getPlannedDuration(), plannedDuration,
"planned duration", id);
activity.setPlannedDuration(plannedDuration);

...

static void logUpdate(boolean update, Object currentValue,
Object newValue, String field, String id) {
if (currentValue == null) {
logger.debug(" Setting " + field + " on " + id);
} else if (!currentValue.equals(newValue)) {
logger.debug(" Updating name on " + id);
}
}

这并不是美妙,但它仍然是一个进步。请注意,当前您实际上正在更新该字段,无论您是否记录了该字段 - 您确定这就是您的意图吗?我更期待这样的事情:

if (update) {
logUpdate(activity.getName(), name, "name", id);
activity.setName(name);

logUpdate(activity.getPlannedDuration(), plannedDuration,
"planned duration", id);
activity.setPlannedDuration(plannedDuration);
}

但是不,目前在 Java 中还没有简单的方法来传递方法。不过,Java 8 将通过方法引用和 lambda 表达式使其变得更加简单。

关于java - 将 getter/setter 作为方法引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com