在 Java 中,布尔包装类包含一个名为
booleanValue()
的方法,该方法返回布尔对象值的布尔原始类型。
令我感兴趣的是,Java 编译器能够识别这个 booleanValue() 方法,并在需要布尔值时在使用布尔值时自动添加它;例如,如果您编写类似
if (something)
的 if 语句,其中 something
是布尔对象,然后编译代码并反编译结果,您将看到代码现在显示为 if (something.booleanValue())
。这几乎就像编译器认识到 Boolean Object 类具有 booleanValue() 方法这一事实,并自动以与将 toString()
添加到字符串加法表达式中添加的任何对象的末尾相同的方式放置它。
所以,我的问题是如何在自定义对象类中使用它?有没有一种方法可以使用编译器识别的
booleanValue()
或 intValue()
方法创建一个对象类,其方式与像 Boolean 和 Integer 这样的包装类?
我发现Boolean Object类只实现了两个接口:
Comparable<Boolean>
和Serializable
。由于它们都不包含 booleanValue()
方法,因此我不明白 Java 编译器如何识别 Boolean Object 类中的 booleanValue()
方法并按其方式使用它。我尝试在自定义对象类中简单地创建一个 booleanValue()
方法,并尝试像布尔值一样使用该对象,但没有成功。
有什么想法吗?
你问题中的关键句子是
被编译器识别
除非你编写自己的编译器,否则你无法让编译器做任何事情。
booleanValue()
之所以有效,是因为 Java 语言规范需要它。
如果
是r
类型的引用,则拆箱转换会将
Boolean
转换为r
r.booleanValue()
booleanValue
在java.lang.Boolean
中声明。