2012-01-17 134 views
101

我知道有因爲如果以短形式聲明簡稱爲Java如果聲明

if (city.getName() != null) { 
    name = city.getName(); 
} else { 
    name="N/A"; 
} 

沒有人知道如何寫簡寫形式,上述5條線成一行編寫Java的方式...

+2

google [java中的三元運算符](https://www.google.com/search?q=ternary+operator+java :) :) – CoolBeans 2012-01-17 17:00:47

+1

我假設你的'if'邏輯錯了。 – NPE 2012-01-17 17:00:58

+4

'if(city.getName()!= null){name = city.getName();} else {name =「N/A」}' – 2012-01-17 17:03:15

回答

248

使用三元運算:

name = ((city.getName() == null) ? "N/A" : city.getName()); 

我覺得你的條件向後 - 如果它是空,你想要的值是「不適用」。

如果城市爲空,該怎麼辦?在這種情況下,你的代碼*會打到牀上。我想補充另一個檢查:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName()); 
+9

+1,儘管你有多餘的括號。我會寫: 'name = city.getName()== null? 「N/A」:city.getName();' – 2012-01-17 17:02:14

+12

風格和品味的問題:我喜歡清楚布爾條款的分組。 – duffymo 2012-01-17 17:06:42

+3

無論如何 - 我使用德摩根定理,並得到你需要的東西。無需編輯,只要您正確表達邏輯。 – duffymo 2012-01-17 17:08:00

4
name = (city.getName() != null) ? city.getName() : "N/A"; 
-3
name = city.getName()!=null?city.getName():"N/A" 
+2

而不是僅僅發佈一些代碼,你可以通過解釋技術來幫助OP。它是如何工作的,它爲什麼起作用? – Zabuza 2017-08-08 23:53:25

+0

在您的操作員周圍放置空間使讀取和維護變得更加容易。 – geowar 2017-09-20 10:41:47

18

這樣做是三元操作方式:

name = city.getName() == null ? city.getName() : "N/A" 

不過,我相信你在你的代碼有一個錯字之上,你的意思是說:

if (city.getName() != null) ... 
16

爲了避免調用.getName()兩次,我會用

name = city.getName(); 
if (name == null) name = "N/A"; 
+1

在具有可變城市的多用戶系統中,可能存在干預'city.setName(null)'。你的答案整齊地處理。 – emory 2012-01-17 18:14:17

4

您可以簡寫爲if, else if, else陳述。例如:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean) 
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";  

這是短形式:

Boolean isCapital = city.isCapital(); 
String isCapitalName; 
if(isCapital == null) { 
    isCapitalName = ""; 
} else if(isCapital) { 
    isCapitalName = "Capital"; 
} else { 
    isCapitalName = "City"; 
} 
+1

這還沒有問到-1。 – Makky 2015-07-23 15:37:24

11

的? :經營者在Java中

在Java中,你可能會這樣寫:

if (a > b) { 
    max = a; 
} 
else { 
    max = b; 
} 

設置一個變量,以基於單一條件的兩個狀態之一是如果其他一個快捷方式具有這樣的普遍使用爲它設計的,有條件的操作符,?:。使用條件操作者可以把上面的例子中這樣一行:

max = (a > b) ? a : b; 

(A> B)? a:b;是返回兩個值之一a或b的表達式。測試條件(a> b)。如果它是真的,則返回第一個值a。如果它爲假,則返回第二個值b。無論返回哪個值都取決於條件測試,a> b。條件可以是任何返回布爾值的表達式。

2
name = ((city.getName() == null)? "N/A" : city.getName()); 

首先檢查條件(city.getName() == null)。如果是,則將"N/A"分配給名稱或簡單地將name="N/A"city.getName()的值分配給名稱,即name=city.getName()

事情看出來這裏:

  1. 條件在中括號其次是一個問號。這就是我寫(city.getName() == null)?的原因。這裏的問號就在條件之後。易於看/讀/猜!
  2. 左值冒號(:)和冒號值右值 (a)當條件爲真時,冒號的左邊值被賦值,否則冒號的右值賦值給變量。

這裏是一個參考:http://www.cafeaulait.org/course/week2/43.html

9

我總是忘卻瞭如何使用?:ternary operator。這個補充答案是一個快速提醒。它是if-then-else的簡寫。

myVariable = (testCondition) ? someValue : anotherValue; 

其中

  • ()保持if
  • ?裝置then
  • :裝置else

它是一樣的

if (testCondition) { 
    myVariable = someValue; 
} else { 
    myVariable = anotherValue; 
} 
1

使用org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A"); 
0

簡單&明確:

String manType = hasMoney() ? "rich" : "poor"; 

長版:

 String manType; 
    if (hasMoney()) { 
     manType = "rich"; 
    } else { 
     manType = "poor"; 
    } 

或如何我使用它是明確爲其他代碼的讀者:

String manType = "poor"; 
    if (hasMoney()) 
     manType = "rich"; 
-2

您可以在Java中使用三元運算符。

語法:

Condition ? Block 1 : Block 2 

因此,在你的代碼,你可以像這樣,

name = ((city.getName() == null) ? "N/A" : city.getName()); 

欲瞭解更多信息,你可以參考this資源。

+1

這是6歲的問題,並已接受答案。你的答案不提供任何新的-1 – Makky 2018-02-05 12:58:04