2010-05-12 108 views
5

我已经写了下面的if语句来在Java中:if语句中的条件运算符?

if(methodName.equals("set" + this.name) || 
    isBoolean() ? methodName.equals("is" + this.name) : 
        methodName.equals("get" + this.name)) { 
    ... 
} 

这是if写出这样的表达,从条件分离状态的好的做法呢?这个表达能够被简化吗?

+0

您是否知道现有的Javabean映射工具?有**很多** :) – BalusC 2010-05-12 23:35:08

+0

我没有什么特别重要的贡献,但即使作为爱三元操作符的人,我也必须注意到,有些人坚信它应该很少被使用。那些人可能会唠叨你的用法。 – 2010-05-12 23:36:55

+0

@BalusC:我的JavaBean活动的大猜想。我只是为了业余爱好和个人使用而实现它,通过每个setter中的'super.property(newValue)'来清理Beans中的语法。 ;-)但我知道他们,谢谢提及。 – Pindatjuh 2010-05-12 23:37:59

回答

8

我将其更改为

if (methodName.equals("set" + this.name) 
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) { 
    ... 
} 
+0

我会放弃冗余'this.' – 2010-05-13 00:54:22

+1

@软件猴:这是我的代码风格,如果它困扰你,我很抱歉。 – Pindatjuh 2010-05-13 01:07:19

+0

@Pindatjuh:够公平 - 我说“我会”,而不是“你应该”。给每个人自己。它不会打扰我,这只是额外的输入。 – 2010-05-13 02:32:58

2

它是好的做法呢?如果它更易于阅读,这很好。如果(1)它确实可以更容易阅读,并且(2)那些被它弄糊涂的人不会阅读它。谁会读它?

2

会不会像下面的工作?

if (methodName.equals("set" + this.name) 
    || methodName.equals("get" + this.name) 
    || (isBoolean() && methodName.equals("is" + this.name))) { 
    ... 
} 

它比你使用三元运算符的方式更可读,当然也更容易理解。它还有一个好处,它可以避免对isBoolean方法进行不必要的方法调用(它有1,2或4个方法调用,而您的方法总是有1或3个;性能增益/损失可能太小)。

而且这里有名为"Is this a reasonable use of the ternary operator?"一个用户有the following to say一个类似的问题:

三元运算符是为了 返回一个值。

IMO,它不应该改变状态,而 应该使用返回值。

在另一种情况下,使用if语句。 如果声明是要执行 代码块。

请注意,我包括周围的括号表达式包含“& &”的可读性。他们没有必要,因为x && ym || n之前被评估。

您是否选择使用它取决于您,但我倾向于避免使用它以支持可读性。

+0

您的重写非常实用,因为方法“getSomeBooleanProperty”也会通过。虽然,它不像SLaks(主观)那样可读。 – Pindatjuh 2010-05-13 00:10:53

2

我会倾向于把它与提取一些功能改变

if (methodName.equals(setterForThis()) 
    || methodName.equals(getterForThis())) { 
    ... 
} 

private String setterForThis() { 
    return "set" + this.name; 
} 

private String getterForThis() { 
    return (isBoolean() ? "is" : "get") + this.name; 
} 

这是较长的过程,但我没有真正进入高尔夫反正。