2010-05-12 203 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; 
} 

這是較長的過程,但我沒有真正進入高爾夫反正。