简体   繁体   English

如何在不重复代码的情况下重用具有不同 arguments 的方法

[英]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.

相关问题 如何在不重复代码的情况下在 Junit5 中测试接口的不同实现 - How to test different implementations for an interface in Junit5 without duplicating the code 如何在不复制代码的情况下从两个不同的CSV文件读取并创建两个不同的数组? - How can I read from two different CSV files and create two different arrays without duplicating code? 在Java中,如何使方法能够在不重复执行代码的情况下接受可变参数或参数集? - In Java, how to make a method able to accept variadic parameters or Set of parameters without duplicating the code of implementation? 如何通过传递不同的类对象来重用方法? - how to reuse method by passing different class object? 如何重用稍有不同的代码 - How to reuse a code which is slightly different 没有泛型的代码重用 - Code reuse without generics 多个addTextChangedListeners而不重复代码 - Multiple addTextChangedListeners without duplicating code 如何编写子类构造函数而不重复代码? - How to write subclass constructors without duplicating your code? 如何在不复制代码的情况下扩展抽象类的 Java 功能? - How to extend java functionality of an abstract class without duplicating code? 有没有办法在不重复代码的情况下使用不同的配置从 2 个不同的类中运行相同的一组测试两次 - Is there any way to run same set of tests from 2 different classes twice with different configurations without duplicating code
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM