Java 如何正确地提取这个

Java 如何正确地提取这个,java,oop,coding-style,Java,Oop,Coding Style,我在这里进退两难 所以,我有一个RESTAPI,它充当使用它的另一个API和来自外部提供者的SOAP API之间的简化代理 在其中,我有4个对应于4个Soap端点的方法,它们将数据从Rest请求DTO-s映射到Soap请求DTO-s 4个Rest请求DTO-s有一个CommonDto,其中包含一些所有请求都有共同点的对象 此常见REST请求DTO的某些字段可以为null,如果是这种情况,我将执行null检查,以便根本不设置相应的SOAP请求字段,因为这将导致SOAP请求失败 这4种方法基本上如下

我在这里进退两难

所以,我有一个RESTAPI,它充当使用它的另一个API和来自外部提供者的SOAP API之间的简化代理

在其中,我有4个对应于4个Soap端点的方法,它们将数据从Rest请求DTO-s映射到Soap请求DTO-s

4个Rest请求DTO-s有一个CommonDto,其中包含一些所有请求都有共同点的对象

此常见REST请求DTO的某些字段可以为null,如果是这种情况,我将执行null检查,以便根本不设置相应的SOAP请求字段,因为这将导致SOAP请求失败

这4种方法基本上如下所示:

public RestResponseObject1 method1(RestRequestObject1 rRO1){
   SoapRequestObject1 sRO1= new SoapRequestObject1();

   Object commonField1= rR01.getCommonField1();//Object can be anything, BigDecimal, String, int,etc.
   if(commonField1!=null){
       sRO1.setCommonField1(commonField1);
   }

   BigDecimal commonField2= rR01.getCommonField2();
   if(commonField2!=null){
       sRO1.setCommonField2(commonField2.intValue());
   }

  //etc....

  return Mapper.map(soapService.doSoapMethod1(sRO1);
}
此方法重复4次,使用不同的RestRequestObject、RestResponseObject和SoapRequestObject,但commonfields类型在它们之间不会改变


我的问题是,如何抽象空检查,以便不对每个方法重复它们,从而使代码更干净?请注意,我没有选择对Soap请求对象执行任何操作,因为它们是通过Swagger/OpenApi自动生成的。您可以从一个简单的实用程序方法开始:

private static <T> void setIfNotNull(T object, Consumer<T> setter) {
  if (object != null) setter.accept(object);
}

或者,在前面的答案的基础上,使其更通用,以便它也适用于其他请求对象

private <T, E> void setIfNotNull(E setterObject, BiConsumer<E, T> setter, T value) {
   if (value != null) {
       setter.accept(setterObject, value);
   }
}

那么,您的意思是所有soap请求对象类型都没有公共接口或父类?您是否使用java8或更高版本?是的,是的,没有公共接口,也没有继承的可能性
private <T, E> void setIfNotNull(E setterObject, BiConsumer<E, T> setter, T value) {
   if (value != null) {
       setter.accept(setterObject, value);
   }
}
setIfNotNull(sRO1, sRO1::setCommonField1, rR01.getCommonField1());