2017-04-21 61 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