Java 有没有办法用重复的if-then模式简化代码?

Java 有没有办法用重复的if-then模式简化代码?,java,spring-boot,Java,Spring Boot,我使用Spring Boot创建了一个基本的CRUD API,因为我为我的控制器创建了一个服务类 以下是我对控制器的维修方法 服务 public Customer updateCustomer(Customer newCustomer, Long customerId) throws ResourceNotFoundException { return customerRepo.findById(customerId) .map(

我使用Spring Boot创建了一个基本的CRUD API,因为我为我的控制器创建了一个服务类

以下是我对控制器的维修方法

服务

public Customer updateCustomer(Customer newCustomer, Long customerId) throws ResourceNotFoundException {
        
        return customerRepo.findById(customerId)
                .map(customer -> {
                    if (newCustomer.getName() != null)
                        customer.setName(newCustomer.getName());
                    if (newCustomer.getGstin() != null)
                        customer.setGstin(newCustomer.getGstin());
                    if (newCustomer.getPhoneNumber() != null)
                        customer.setPhoneNumber(newCustomer.getPhoneNumber());
                    if (newCustomer.getAddress() != null)
                        customer.setAddress(newCustomer.getAddress());
                    if (newCustomer.getOutstandingBalance() != 0.0f)
                        customer.setOutstandingBalance(newCustomer.getOutstandingBalance());
                    return customerRepo.save(customer);
                }).orElseThrow(() -> new ResourceNotFoundException());

    }
我的问题是:是否可以使用多个if来简化代码


如果有,任何人都可以建议简化以处理此逻辑…...

不是,我建议的是发送客户作为完整客户发送的前端/客户端,而您的方法只执行保存操作


您使用的一个可以很好地工作,但是不建议使用多个if语句,即使IDE给出了警告,至少一个好的IDE应该这样做。

是的,有这样一个简化。使用,可以调用类/实例的方法。假设您有一个以
String[]
为参数的方法,该方法包含
“Name”
等值,您可以迭代该数组并调用
newCustomer
的getter,将其与null进行比较,如果不是null,则可以调用
customer
的setter,传递刚刚调用的getter的结果


有关更多信息,请参阅本文:

另一种方法可能是这样的

我希望Java语言中的宏能够支持这样的模式,这样就可以将这些模式包装在宏调用中,然后扩展为生成的源代码。由于没有宏,所有宏都可以放入方法中,并在运行时执行检查复制模式:

公共最终类补丁{
专用修补程序(){
}

公共静态无效非空(最终供应商如果您关心不覆盖已设置的属性,请使用
if
。I您可以将已设置为null的属性设置为null,删除
if
sAs就Java代码而言,没有其他构造可以更好地执行此逻辑顺序的检查和设置e可选.of(newCustomer.getName).ifPresent(字符串s->customer.setName),这样您就可以避免所有这些if,代码就更清晰了。在这里使用反射会使代码变得狂野。如果OP的bean类中有5个以上的属性,而不是所有属性都应该检查和复制,那该怎么办?@fluffy确实,可能有多个问题困扰着该项目。但是,OP询问了一个pattern,这个答案就是为了解决这个问题。我建议将这个答案中的想法用于问题中提出的问题,对于与问题中提出的问题非常不同的问题,我建议不要坚持这个答案。这个问题是以一种固执己见的方式提出来的。我对它进行了编辑,因此它非常有用h现在更客观了。提问者想知道是否可以简化代码,以避免重复if-then模式。你说这不是最好的方法是对的,但从认识论上讲,你只能知道如果你知道更好的方法。但是,你的答案不包含替代方法。I建议使用反射。如果一个方法正在实现该模式,获得customer和newCustomer以及一个名称数组,那么这可以用于简化。因为在这种情况下,您只能传递一些参数,让逻辑在罩下展开。这比我们在t中看到的模式重复要好得多简言之,我同意你的观点,但除非你也提供解决方案,否则我无法对你的答案投赞成票。