Я разрабатываю веб-сайт для своей компании и использую Spring в качестве бэкэнда.Сейчас есть ситуация, когда мне нужно использовать один из моих методов Utils дважды, но для разных DAO.
Чтобы избежать дублирования кода, мне было интересно, как я могу использовать Java Generics для того, чтобы сделать этометод применим для обоих случаев.Метод просто подсчитывает одно из полей, общее для обоих DAO.
Метод Util:
SeverityCount calculateSeveritiesCount(List<?> events){
if(null == events){
return new SeverityCount();
}
if(events.get(1) instanceof EventDAO){
events = (List<EventDAO>)events;
}
else if (events.get(1) instanceof EventsByAreaDAO) {
events = (List<EventsByAreaDAO>)events;
}
Map<String, Long> severityCountMap = events.stream().collect(
Collectors.groupingBy(
EventDAO::getSeverity, //It should be EventDAO or EventsByAreaDAO. both has severity field.
Collectors.counting())
);
return mapper.convertValue(severityCountMap, SeverityCount.class);
}
Событие DAO:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "events")
public class EventDAO {
@Id @Column(name = "uid")
private String uID;
private String date;
private String severity;
}
Область DAO:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "events")
public class EventsByRegionDAO {
@Id @Column(name = "uid")
private String uID;
private String date;
private String type;
private String severity;
private String area;
private String server;
}
Вот как я звоню из сервиса:
SeverityCount severitiesCount = Utils.calculateSeveritiesCount(eventsList); //EventsList could be list of EventDAO or EventsByAreaDAO