你能解释一下Java中的"isXxx"方法名吗?

10

在规范中是否有任何涉及以"is"开头的方法的参考,而方法名称的后缀是属性名称(类似于Java Bean的getter/setter方法)?

例如:

public boolean isConditionTrue() {
   ...
   ...
}

private boolean conditionTrue;

谢谢!


这是一种getter方法的形式。请参见页面下方的引用。 - n0rm1e
3个回答

24

这是 Java 命名惯例,

如果方法返回一个布尔值,使用 ishas 作为方法名称的前缀。例如,对于返回 truefalse 值的方法,使用 isOverdrawnhasCreditLeft。避免在布尔方法名称中使用单词 not,使用 ! 运算符代替。例如,使用 !isOverdrawn 而不是 isNotOverdrawn

另请参阅:


根据 Java 语言规范,

用于测试对象的布尔条件 V 的方法应该命名为 isV。例如,Thread 类的方法 isInterrupted


谢谢,这回答了我的问题!请看一下我对成员“houman001”的跟进。 - rapt
1
@rapt,我建议你将其作为一个单独的问题。它在这里真的没有任何相关性。 - mre

10

该方法仅适用于基本布尔类型。以下摘自规范:

8.3.2布尔属性 此外,对于布尔属性,我们允许getter方法匹配以下模式: public boolean is(); 这个“is”方法可以取代“get”方法,也可以在“get”方法之外提供。 无论哪种情况,在布尔属性的“is”方法存在时,我们都将使用“is”方法来读取属性值。 一个例子布尔属性可能是: public boolean isMarsupial(); public void setMarsupial(boolean m);

注意,如果您要与JSTL标签(使用${object.xxx}语法)一起使用isXxx() : Boolean函数,则需要注意。它们不会识别它,你必须将其修改为getXxx() : Boolean


请提供需要翻译的具体内容。 - Paul Bellora
谢谢!我在Spring bean中尝试了以下代码:@AssertTrue public boolean isConditionTrue() { return false; },JSP中有:<form:errors path="conditionTrue" cssClass="error" />。然而,我没有看到“error”消息,请问为什么?(该bean的其他属性确实显示错误消息) - rapt
我不知道这个问题的答案,但我认为你应该使用“path”属性来处理表单中的字段(你也可以使用通配符)。我不确定你是否能在这里访问一个方法。 - n0rm1e
谢谢!我也有这个字段(属性):private boolean conditionTrue; 但是正如我所说,我没有收到错误消息。无论如何,我刚刚为此提出了一个新问题。 - rapt
我的意思是“字段”类似于文本框的东西;-) - n0rm1e
明白了,但我不确定你所说的访问方法是什么意思?我像访问命令对象中的任何其他属性一样访问了conditionTrue属性。我认为一旦getter返回false,就会创建一些消息。 - rapt

6

“is”是对于布尔型变量的访问器方法的前缀。

这是用于布尔数据类型的惯例,而“get / set”则是其他类型的惯例。


我认为is应该在几乎每个返回布尔值的函数中使用,而不仅仅是访问器。 - Mikita Belahlazau
谢谢,这回答了我的问题!请看一下我对成员“houman001”的跟进。 - rapt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接