2009-07-13 71 views
15

如果一个类包含一个名为“blah”的变量,那么标准的getter/setter语法显然是getBlah()和setBlah()。但如果我有一个名为isBlah的变量的POJO类,我会使用:POJO类中的“is”变量getter/setter的正确语法是什么?

public type getIsBlah() { 
    return isBlah; 
} 

public setIsBlah(type isBlah) { 
    this.isBlah = isBlah; 
} 

或者它会是这样吗?

public type isBlah() { 
    return isBlah; 
} 

public setBlah(type blah) { 
    this.isBlah = blah; 
} 

第一似乎更加严格符合POJO公约,但第二个类型是什么的IntelliJ产生,如果我问它使一个类的getter/setter方法(哎,的IntelliJ从来没有让我失望过:])。那么哪个是首选语法?

回答

20

使用属性的一个原因是将API从实现中分离出来。换句话说,你不应该被你调用的私有变量所束缚。除了试图让代码维护者保持可读性之外,这不应该通知命名。

我想说如果在这种情况下“类型”是boolean,那么第二种形式是正确的。如果是而不是boolean,您应该使用getXXX - 但我可能不会使用getIsXXX。对我而言,“是”与布尔属性具有非常强的对应关系,并且在其他上下文中使用它不仅会打破JavaBeans约定(这会影响其他工具),而且会误导IMO。

+3

打破JavaBeans约定+1 +1 – 2009-07-13 08:38:56

+5

@Vincent:我假设你的意思是“+1提及它会违反JavaBeans约定” - 而不是“+1 - 成为会议破坏者!” :) – 2009-07-13 08:44:35

3

不会说POJO有很强的约定,但对于JavaBeans第二个(IntelliJ)例子是布尔属性的标准,其他所有使用getX

2

我也会选择你的第二个选项。第一个,getIsBlah()似乎罗嗦和多余。

1

“get”和“is”实际上都不错,因为在技术上它们在JavaBeans约定下仍然可以接受。我会选择更好或更自然的声音,具体取决于你的“Blah”实际上是什么词。

3

如果您使用JSTL,那么就是“is”语法存在一个大问题,那就是JSTL EL无法识别它们。这很愚蠢,但JSTL EL的设计者并没有去检查他们的逻辑是否符合javabeans。

我经常发现自己在我的视图层类中调用getIsBlah()方法,它调用isBlah(),只是为了给JSTL一个钩子。这太糟糕了。

4

请注意,该字段的名称与JavaBean specification完全不相关。只有getter/setter的名字是相关的。

通常,吸气剂的名称是get<PropertyName>()。只有boolean属性是is<PropertyName>()允许作为替代。

请注意,在您的示例中,当您调用getter isBlah()时,Bean属性名称为“Blah”,当您调用getter getIsBlah()时,它的“IsBlah”。

我个人通常更喜欢isBlah()

0

JSTL只允许isMyBool,如果它是一个布尔值,而不是布尔值或任何其他对象,按照bean规范。 (原始vs对象)。

0

这意味着JAXB生成不正确的代码。它创建了Boolean属性,因为它们需要为空,但仍然命名为他们的获取者isXXX(),这违反了Bean规范。

相关问题