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

如何在Java(eclipse IDE)中处理空值,java,eclipse,nullpointerexception,lombok,Java,Eclipse,Nullpointerexception,Lombok,我正在开发一个API(EclipseIDE-Kepler),JDK1.7) 我需要一条像这样的捷径 @IFNOTNULL更新 考虑以下因素,例如: Model model = new Model(); String field1 = entity.getField1() != null ? entity.getField1() : ""; model.setField1(field1); 这样我就可以像这样写了 model.setField1( @IfNotNullUpdate entity.

我正在开发一个API(EclipseIDE-Kepler),JDK1.7) 我需要一条像这样的捷径 @IFNOTNULL更新

考虑以下因素,例如:

Model model = new Model();
String field1 = entity.getField1() != null ? entity.getField1() : "";
model.setField1(field1);
这样我就可以像这样写了

model.setField1( @IfNotNullUpdate entity.getField1(),"");
我不想有任何NullPointerException。如果它能像builder模式一样工作,那将是一个很大的帮助。例如

model.addField_25(@IfNotNullUpdate entity.getField_37())
     .addField_16(@IfNotNullUpdate entity.getField_69());
我尝试了@NonNull of。它只是确保param不为null,这不是我的要求

当然,assert()不是一个解决方案。希望我能很好地解释我的要求


提前谢谢。

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

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。正如你所指出的,龙目山并不是为你做的。

看一看。使用提供的示例,如果调用的任何方法返回空值,则以下方法可以抛出NPE:

String version = computer.getSoundcard().getUSB().getVersion();
若要避免(x!=null)检查过多或过多,请使用
Optional
,您可以使用:

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

它的可能副本不是副本。他想知道是否存在自动设置值的现有解决方案。这可能会有所帮助:我认为这些检查似乎比这更简单,可读性更强。@Zar如果有10+嵌套
if
null-checks,@M.Shaw我同意这是最好的选择。我有更多的时间引入JDK 8(向后兼容性)。我很想用这个。谢谢您的解决方案。@DVSanthoshKiran如果它解决了您的问题,请将其标记为答案。@M.Shaw我正在探索Java 7的选项是的,自定义注释不值得花时间。我实际上在寻找一个现有的解决方案。如果我有数千个实体和模型,每个实体和模型都有数百个字段,那么这实际上可行吗?如果你有很多字段,我猜不可行。然后可以使用反射:
publicstringgetfield(objectbean,stringmethodname){BeanInfo info=Introspector.getBeanInfo(bean.getClass(),Object.class);PropertyDescriptor[]props=info.getPropertyDescriptors();字符串值;for(PropertyDescriptor pd:props){Method getter=pd.getReadMethod();如果(getter.getName().equals(methodName)){//add try catch//get-from-method-value=getter.invoke(bean);if(value!=null)返回值;}}}}返回“”;}