【问题标题】:Object array null check [duplicate]对象数组空检查[重复]
【发布时间】:2018-10-28 16:43:28
【问题描述】:

我发现了很多关于这个主题的问题 - 但没有找到与我相同的问题。

我在 Java 8 项目中工作。 我从 sql-query 得到 Object[] 实例,类似于:

"SELECT user.name, user.age, user.client_type, user.shopping_card FROM user_account user"

(我使用 sqlyog

有时 user.client_type 字段或 user.shopping_card 返回 null。 当我想将此 Object[] 实例转换为 Java 类时,出现异常:

String userName= (String) obj[1];
    int age= (Integer) obj[2];
    int type=  obj[3]== null? null: (Integer) obj[3];
    int card=  obj[4]== null?  null: (Integer) obj[4] ;
    return new UserData(userName, age, type, card);

当类型为空/卡为空时,调试类型/卡转换行时出现异常:

java.lang.NullPointerException

"SELECT user.name, user.age, 
CASE WHEN user.client_type IS NOT NULL THEN user.client_type ELSE NULL END as 
 client_type, CASE WHEN  user.shopping_card  IS NOT NULL THEN 
 user.shopping_card ELSE NULL END as shopping_card FROM user_account user"

我该怎么办? 我必须说,当所有数据都不为空时 - 一切正常!

【问题讨论】:

  • 你的代码是这样的,你应该得到一些转换错误,因为你不能通过转换将某些东西转换为 int,而且我认为你不应该在任何地方得到 NullPointerException。你能分享更多的代码吗?就像您如何从表中读取数据一样?
  • 我给你写了 0 “我必须说,当所有数据都不为空时 - 一切正常!” - 所以问题一定是空值

标签: java mysql java-8


【解决方案1】:

好的,这段代码有问题,

int type=  obj[3]== null? null: (Integer) obj[3];
int card=  obj[4]== null?  null: (Integer) obj[4] ;

当 obj[3] 或 obj[4] 为 null 时,不能将 null 值赋给原始类型。

您需要像这样分配 -1 或 0,因为原始类型不能保存空值,只有对象可以。

试着做这个,

    int type=  obj[3]== null? -1: Integer.valueOf(obj[3]);
    int card=  obj[4]== null? -1: Integer.valueOf(obj[4]);

此外,您应该使用 Integer.valueOf 而不仅仅是转换为 Integer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多