如何处理 Java 中的空值(eclipse IDE)

How to handle null values in Java (eclipse IDE)

我正在开发 API(Eclipse IDE - 开普勒),JDK 1.7) 我需要一个捷径 @IfNotNullUpdate

考虑以下内容,例如

Model model = new Model();
String field1 = entity.getField1() != null ? entity.getField1() : "";
model.setField1(field1);

这样我就可以简单地写成

model.setField1( @IfNotNullUpdate entity.getField1(),"");

我不想有任何 NullPointerExceptions。如果它能像构建器模式一样工作,那将是一个很大的帮助。例如

model.addField_25(@IfNotNullUpdate entity.getField_37())
     .addField_16(@IfNotNullUpdate entity.getField_69());

我尝试了 lombok 的@NonNull。它只是确保 param 不为空,这不是我的要求。

当然,assert() 也不是解决方案。希望我能够很好地解释我的需求。

提前致谢。

你为什么不只使用一种方法呢?如果需要,您可以将其设为静态,以便您可以通过类名访问它。或者将您需要的辅助方法放在 oneClass 中并扩展它。

public String getFieldValue(Object o ){
    if(o instanceof someEntity){
        someEntity se = (someEntity) o
        if(someEntity.getField() != null){
            return someEntity.getField();
        }else{
            return ""; 
        }
    }else if(o instanceof someOtherEntity){
       ...
    }
}

您需要为此目的或您的任何目的构建自定义注释。您可以使用 @Target(ElementType.PARAMETER) 为您创建一个注释,并根据需要使用反射来映射它。但这是一个漫长的过程,不需要您花费太多时间。相反,只需编写一个方法并调用它即可。

我想不出 API 是现成的。正如您所指出的,lombok 不会为您这样做。

看看Optional。使用提供的示例,如果调用 returns 的任何方法为空值,则以下代码可能会抛出 NPE:

String version = computer.getSoundcard().getUSB().getVersion();

为了避免这种或过多的 if (x != null) 检查,使用 Optional 你可以使用:

String name = computer.flatMap(Computer::getSoundcard)
                          .flatMap(Soundcard::getUSB)
                          .map(USB::getVersion)
                          .orElse("UNKNOWN");