[英]How to reuse a method with different arguments without duplicating code
Sonar is complaining about this method which is duplicated code (The same exact method is available in two different Mapper classes) Sonar 抱怨这种方法是重复的代码(相同的方法在两个不同的 Mapper 类中可用)
EventBasicMapper: 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();
}
}
EventMapper事件映射器
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();
}
}
The only difference between these methods is the argument: one receives an EventTable and the other receives an Event.这些方法之间的唯一区别是参数:一个接收 EventTable,另一个接收 Event。 Is there a way i can reuse this functionality without duplicating the code?
有没有办法在不复制代码的情况下重用这个功能? Is there any way i can call this method and pass a different data type paramether?
有什么方法可以调用此方法并传递不同的数据类型参数吗?
Hopefully i explained my issue here.希望我在这里解释了我的问题。 Thanks!
谢谢!
Create a util class/ static method, (assuming var eventStatus is of type T, replace T with your actual type here please)创建一个 util 类/ static 方法,(假设 var eventStatus 是 T 类型,请在此处将 T 替换为您的实际类型)
Foo.class Foo.class
public static Optional<Date> getDoneDate(T eventStatus) {
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();
}
}
now, EventBasicMapper:现在, EventBasicMapper:
private Optional<Date> getDoneDate(EventTable event) {
return Foo.getDoneDate(event.getEventStatus());
}
and EventMapper:和事件映射器:
private Optional<Date> getDoneDate(Event event) {
return Foo.getDoneDate(event.getEventStatus());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.