Java 如何使对象像布尔一样利用booleanValue()?

Java 如何使对象像布尔一样利用booleanValue()?,java,compiler-construction,casting,boolean,wrapper,Java,Compiler Construction,Casting,Boolean,Wrapper,在Java中,布尔包装类包含一个名为booleanValue()的方法,该方法返回布尔对象值的布尔基元类型。 我对此感兴趣的是,Java编译器识别这个booleanValue()方法,并在需要布尔值时使用布尔值时自动添加它;例如,如果编写一个if语句,如if(something),其中something是一个布尔对象,然后编译代码并反编译结果,您将看到代码现在读取if(something.booleanValue())。这几乎就像编译器认识到布尔对象类具有booleanValue()方法这一事实

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

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

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

我发现布尔对象类只实现了两个接口:
Comparable
Serializable
。由于这两种方法都不包括
booleanValue()
方法,因此我不理解Java编译器如何识别布尔对象类中的
booleanValue()
方法,并以它的方式使用它。我试着在我的自定义对象类中简单地创建一个
booleanValue()
方法,并试图像使用布尔值一样使用该对象,但没有效果


有什么想法吗?

你问题中的关键句子是

这是由编译器识别的

除非您自己编写编译器,否则无法让编译器执行任何操作。
booleanValue()
有效的原因是

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


.

所以编译器绝对无法像识别布尔类那样识别另一个类?如果不重写自己的编译器,就无法使用我自己的自定义对象类进行“取消装箱转换”@REALDrummer。好吧谢谢你的帮助。我希望通过基本上为我转换编译器,使用这种方法使我的代码变得更好,但我想这不会起作用。@REALDrummer Java不是很适合这种方式自定义的。我只是想,他们通常通过一个特殊的接口或使对象扩展一个特定的标准对象类来指定这类东西,但是我在布尔类声明中找不到任何特殊的东西,所以我想我可能遗漏了一些东西。哦,好吧。我会继续寻找一个好方法来做这件事。