【发布时间】:2022-01-09 21:14:21
【问题描述】:
Sonar 抱怨这种方法是重复代码(完全相同的方法在两个不同的 Mapper 类中可用)
EventBasicMapper:
private Optional<Date> getDoneDate(EventTable event) {
var eventStatus = event.getEventStatus();
if(eventStatus.getName().equals(EventState.DONE.getName())) {
List<EventStatusLog> eventStatusLogs = event.getEventStatusLog();
if(eventStatusLogs.isEmpty()) {
return Optional.of(Iterables.getLast(event.getLogs()).getDate());
}
return Optional.of(Iterables.getLast(eventStatusLogs).getModified());
} else {
return Optional.empty();
}
}
事件映射器
private Optional<Date> getDoneDate(Event event) {
var eventStatus = event.getEventStatus();
if(eventStatus.getName().equals(EventState.DONE.getName())) {
List<EventStatusLog> eventStatusLogs = event.getEventStatusLog();
if(eventStatusLogs.isEmpty()) {
return Optional.of(Iterables.getLast(event.getLogs()).getDate());
}
return Optional.of(Iterables.getLast(eventStatusLogs).getModified());
} else {
return Optional.empty();
}
}
这些方法之间的唯一区别是参数:一个接收 EventTable,另一个接收 Event。 有没有办法可以在不复制代码的情况下重用这个功能?有什么方法可以调用此方法并传递不同的数据类型参数吗?
希望我在这里解释了我的问题。谢谢!
【问题讨论】:
-
是的,将内容提取到一个私有函数中并让两者都调用它
-
找一个Event和Eventable共享的通用接口(可能是Event本身)
-
界面不错,我比较喜欢
-
如果您可以向我们展示模型 Event 和 EventTable,那将有所帮助