Groovy中以is开头的布尔方法为何可通过属性名访问?
这是Groovy的语言特性吗?
没错,这是Groovy自带的语言特性,属于它的属性访问语法糖,主要是为了兼容JavaBean的命名规范。
背后的逻辑
Groovy在处理foo.bar这种属性访问时,会自动匹配对应的getter方法:
- 对于普通类型属性,它会查找
getBar()这类标准getter; - 对于布尔类型属性,除了
getBar(),它还会把以is开头的方法(比如你代码里的isBar())当成该属性的getter实现。
所以当你写foo.bar时,Groovy内部其实是在调用foo.isBar(),两者的运行结果完全一致,都会输出false。
这个设计是为了贴合Java开发者的习惯——Java里布尔类型的属性一般用isXXX()做getter,Groovy把这个逻辑封装成了语法糖,让你能用更简洁的属性写法替代方法调用。
内容的提问来源于stack exchange,提问作者vnskln
相关产品推荐
相关产品推荐

