2017-04-21 63 views

回答

9

首先,你可以使用structural equality operator ==,它被傳遞給自動調用.equals(...)translation == TRANSLATION_X,而不是translation.equals(TRANSLATION_X)

然後,您可以使用when statement

when (translation) { 
    TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z -> return 
    else -> translation = TRANSLATION_X 
} 
2

一個時,聲明在這種情況似乎分配:

val translation = when(translation) { 
    TRANSLATION_X -> translation 
    TRANSLATION_Y -> translation 
    TRANSLATION_Z -> translation 
    else TRANSLATION_X 
} 

我想你也可以組三個類似的案件在這樣一個句子:

val translation = when(translation) { 
    TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z -> translation 
    else TRANSLATION_X 
} 
+0

注:此代碼不保留的問題原片的代碼的語義:'VAL翻譯= ...'只會遮蔽'翻譯'從外部範圍(或者如果這是一個局部變量將不會被編譯),並且'translation'不會被重新分配。 – hotkey

2

另一種替代方案可能更多效率比when表達式是使用Set

val options = setOf(TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z) 

if (translation in options) return 
else translation = TRANSLATION_X 
+1

我相信在三項集合中查找的速度要麼是EnumSet,要麼是'equals'檢查非常昂貴,而'hashCode'計算不是很昂貴。否則,特別是使用默認的「equals」實現(即identity equals)和基元,一個集合幾乎不會帶來任何性能改進。 – hotkey

+1

這取決於很多事情。但是可以肯定的是,效率可能並不高,這就是爲什麼我說「效率更高」。 – Renato