当getter具有null值时如何返回null值,而不是返回java.lang.NullPointerException

问题描述

查询数据库并将其映射到类

MyDataClass myDataClass = myDataDao.findMyDataByAccountNumber(accountNumber);

我将它映射到其他这样的班级

MyOtherDataclass myOtherDataClass = new MyOtherDataClass();
myOtherDataClass.setBirthDate(myDataClass.getBirthDate().toString);

我知道myDataClass.getBirthDate()为空,因为数据库中的birthdate值为空。 如果我向数据库中的birthdate插入值,那么它正常,一切正常。但是,如果它没有值,那么我想将其设置为json中的null而不是抛出java.lang.NullPointerException: null

我希望这样的结果在json

{
AccountNumber: "12313",BlaBla: "blabla",BirthDate: null,}

================================================ ==========================

发现了问题。

我在.toString()上使用myOtherDataClass.getBirthDate().toString(),所以它抛出了空指针。因为myDataClass中的birthDate为空。抱歉,这是我的坏事。

使用

解决
myOtherDataClass.setBirthDate(myDataClass.getBirthDate() != null ? myDataClass.getBirthDate().toString() : null);

解决方法

我们对您的课程(myDataClassmyOtherDataClass)没有任何了解,因此很难确定为什么getter会引发错误。不过,我只是在这里猜测,可能是您正在寻找一种快速的班轮来处理空值,对此的一个答案是:

myOtherDataClass.setName((myDataClass.getName() != null) ? myDataClass.getName() : "somethingelse");

ternary construct可用于呈现任何您想要的“东西”,包括null(我也不知道您是如何生成json的,所以我也不知道您如何处理一个空值。)

如果您希望看到一个完整的示例,这里是一个带有两个实例(一个已命名,一个未命名)的假DAO。

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".

class MyDataClass {
    String accountNumber;
    String blaBla;
    String name;
    
    public MyDataClass(String accountNumber,String blaBla) {
        this.accountNumber = accountNumber;
        this.blaBla = blaBla;
    }
    
    public MyDataClass(String accountNumber,String blaBla,String name) {
        this.accountNumber = accountNumber;
        this.blaBla = blaBla;
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
    
}

class MyOtherDataClass {
    String name;
    String foo;

    public MyOtherDataClass() {
        this.foo = "bar";
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void printIt() {
      System.out.println("Name: "+ name );
      System.out.println("Foo: " + foo );
      System.out.println("\n");
   }
}


class Main {
    public static void main(String[] args) {
        MyDataClass myDataClassHasNoName = new MyDataClass("12345","BlaBla");
        MyDataClass myDataClassHasName = new MyDataClass("12346","BlaBla","Name");

        MyOtherDataClass myOtherDataClassHasName = new MyOtherDataClass();
        MyOtherDataClass myOtherDataClassHasNoName = new MyOtherDataClass();
        myOtherDataClassHasName.setName((myDataClassHasName.getName() != null) ? myDataClassHasName.getName() : "somethingelse");
        myOtherDataClassHasNoName.setName((myDataClassHasNoName.getName() != null) ? myDataClassHasNoName.getName() : "somethingelse");
        
        myOtherDataClassHasName.printIt();
        myOtherDataClassHasNoName.printIt();
        
    }
}

这里是链接on mycompiler

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...