讨论:如果一个布尔值可能为空,则不要用布尔来定义它的类型

“肚子里的孩子是不是男的?”? 除了回答“是”或“否”,还可以回答“不知道/未定”

原始的boolean类型不能赋值为“未定”,不能用;

java.lang.Boolean类型的对象可以赋值为“null”,似乎可以解决这个问题。 但这种做法仍有隐患:

  1. 有的人对“Boolean值可能为空”缺乏意识。 比如你的同事再调用你的 isBoy()时可能并不会先判断它是否为null.

  2. 有些框架对封装类型如Boolean, Integer会使用默认值机制。比如有些Web Service框架就会把客户端传来的Boolean值强行设置成Boolean.FALSE

为了解决这个问题,最好弃用布尔类型,改用enum,或者字符串。人们在潜意识里都知道enum和字符串可能为空,因此不会贸然犯错。

enum Gender{
  MALE, FEMALE
}

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.