我编写了一个构造函数并传递一个布尔标志来决定将哪个值设置为类变量。代码如下
public PDFParagraph(PDFPhrase phrase,boolean isRtl) {
super(phrase);
if(isRtl)
this.setAlignment(Element.ALIGN_RIGHT);
else
this.setAlignment(Element.ALIGN_LEFT);
}
现在我很困惑,不知道是否要在构造函数中添加if ... else条件。设置类变量值是不错的风格?
谢谢, Hanumant。
答案 0 :(得分:5)
构造函数中的条件本身并不成问题。但是,在这种情况下,我倾向于像这样编写你的构造函数:
public PDFParagraph(PDFPhrase phrase, boolean isRtl) {
super(phrase);
setAlignment(isRtl ? Element.ALIGN_RIGHT : Element.ALIGN_LEFT);
}
答案 1 :(得分:2)
使用if
/ else
来执行此操作没有样式问题。但是:
你可以更简单地写出来:
setAlignment(isRtl ? Element.ALIGN_RIGHT : Element.ALIGN_LEFT);
很多人(包括我自己)认为你应该总是在“then”和“else”语句中加上大括号。
在一个相关的观点上:如果你发现自己编写了一个如下所示的构造函数:
public Thing(boolean cond, ...) {
super(...);
if (cond) {
// Lots of statements
} else {
// Lots of different statements
}
...
}
这可能表明您需要重构构造函数。 (或者可能不是......这取决于细节。)
答案 2 :(得分:1)
如果您只是将初始对齐传递给set,那么构造函数的用户可能会更清楚,特别是如果它是Enum
并且那些是唯一的可能性。但是,如果您试图限制初始对齐并且它类似于String
,那么您所做的似乎很好。尽管如此,您仍然可能想要考虑Enum
。它比传递给构造函数的true
或false
更容易阅读。
答案 3 :(得分:1)
当然,您可以将if / else语句添加到构造函数中。
通常最好的做法是尽可能将方法保持为原子(短和点)并明确定义。这也适用于构造函数。您希望构造函数根据您传递的参数设置对象。
如果您需要if / else,那么您可以放入一个。 如果你需要的话,你甚至可以疯狂地放一个for循环! ;)
答案 4 :(得分:0)
我建议你使用enum和switch语句而不是boolean。添加另一个对齐时会发生什么?