2013-03-06 63 views
0

在Java中,我有一個像表達式如下:爪哇三元(內聯)運算符:accesing比較 - 變量

return (a.getValue() > b.getValue()) ? a.getValue() : b.getValue(); 

當我約13歲,我使用MSL的代碼(mIRC的Scriptint語言) 。 這語言有以下三元運算符:

return iif($valueOfA > $valueOfB, $v1, $v2); 

其中$ v1和v2的$ $代表和valueOfA $ valueOfB。

我不喜歡它,我要打電話a.getValue()b.getValue()兩次,也這是非常醜陋的(並且打破了直列操作點):

valA = a.getValue(); 
valB = b.getValue(); 
return (valA > valB ? valA : valB); 

所以我尋找這樣的事情:

return (a.getValue() > b.getValue) ? [param1] : [param2]; 
+0

在這裏你可以用'Math.max'離開。但嚴重的是:在Java中,必須依賴(熱點)編譯器。所以它有助於使方法最終。另一種語言:在av> bv中,let av = a.getValue(),bv = b.getValue()av:bv'。 – 2013-03-06 08:39:37

回答

3

喜歡的東西:

return ((a.getValue() > b.getValue()) ? a : b)).getValue(); 

可能已經幫助。你也可以實現在一個&乙類中的某些方法來比較「A」和「B」直接,要能寫的東西,如:

return ((a.greaterThan(b)) ? a : b).getValue(); // no operator overload in Java 

此外,如果你正在使用的對象,也許返回或者b(而不是他們的「價值」)會是一個更好的主意。

這取決於您對「a」和「b」所做的類和用法。

+0

只需要注意,除非你實現了第二種方法,否則你仍然調用兩次getValue()和return((a.getValue()> b.getValue())?a:b))。getValue();'基本上和'return(a.getValue()> b.getValue())一樣? a.getValue():b.getValue();' - 它只是**看起來不同。 – 2013-03-06 10:20:11

2

所以我在尋找這樣的事情: 回報(a.getValue()> b.getValue)? [param1]:[param2];

Java語言被明確定義。尋找不存在的功能是徒勞的。或者讓事情變得簡單「不」。

而作爲一個評論,這一點:

iif($valueOfA > $valueOfB, $v1, $v2); 

操作。它可以是宏觀,功能,方法而不是運營商。

1

這樣做怎麼樣?

int x, y; 
int result =((x = a.getValue()) > (y = b.getValue())? x: y); 

上面的例子:

  1. 創建兩個整數變量(或任何類型你喜歡)。
  2. 在三元操作中,將a.getValue()分配給x,將b.getValue()分配給y。
  3. 執行測試並根據條件返回變量。
+0

+1,簡短的方法:) – Azad 2013-07-23 23:09:22