对象数组空检查

时间:2018-10-28 08:29:53

标签: java mysql java-8

我发现了很多与此主题有关的问题-但找不到与我相同的问题。

我在 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);

当type为null / card为null时,在调试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"

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

1 个答案:

答案 0 :(得分:0)

好的,此代码有问题,

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。