我发现了很多与此主题有关的问题-但找不到与我相同的问题。
我在 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"
我该怎么办? 我必须说,当所有数据都不为空时-一切正常!
答案 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。