在Java中,布尔包装器类包含一个名为booleanValue()的方法,该方法返回布尔对象值的布尔原始类型。

让我对此感兴趣的是,Java编译器可以识别此booleanValue()方法,并在需要布尔值时使用布尔值时自动添加它。例如,如果您编写类似if (something)的if语句,其中something是布尔对象,然后编译代码并反编译结果,您将看到代码现在读取if (something.booleanValue())。几乎就像编译器意识到布尔对象类具有booleanValue()方法这一事实,并以与可以将toString()添加到在字符串添加表达式中添加的任何对象的末尾相同的方式自动放置该对象。

因此,我的问题是如何在自定义Object类中使用它?有没有一种方法可以使用编译器可以识别的booleanValue()intValue()方法制作Object类,就像使用Boolean和Integer这样的包装类一样?

我发现布尔对象类仅实现两个接口:Comparable<Boolean>Serializable。由于这两个都不包含booleanValue()方法,因此我不理解Java编译器如何识别Boolean Object类中的booleanValue()方法并以它的方式使用它。我尝试在自定义Object类中简单地创建一个booleanValue()方法,并试图像布尔值一样使用Object,但无济于事。

有任何想法吗?

最佳答案

您问题中的关键句子是


  被编译器识别


除非您编写自己的编译器,否则您将无法使编译器执行任何操作。 booleanValue()起作用的事实是因为Java Language Specification requires it.


  如果r是类型Boolean的引用,则取消装箱转换会将r转换为r.booleanValue()


The method booleanValue is declared in java.lang.Boolean

关于java - 如何使对象像Boolean一样利用booleanValue()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23100195/

10-10 16:41