列挙を説明する次のコードがあります。
package aicore2.worker.scheduling
object Priority extends Enumeration with App {
type Priority = Value
/**
* Action is performed immediately, any running action is interrupted
* and action queue is cleared
*/
val ACHTUNG = Value
/**
* Action is performed before all LOW, NORMAL and HIGHER actions
*/
val HIGH = Value
/**
* Action is performed before all NORMAL and LOW actions
*/
val HIGHER = Value
/**
* Standart priority for most actions
*/
val NORMAL = Value
/**
* Action is added to the end of the queue. Desired for non-critical maintenance actions
*/
val LOW= Value
Priority.values foreach println
}
そしてテスト:
package aicore2.worker.scheduling
import org.junit.Assert._
import org.junit.Test
import aicore2.worker.scheduling.Priority._
class PriorityTypeTests {
@Test
def toStringTest() {
//Priority.values foreach println
//Priority.main(Array("2"))
assertEquals(HIGH.toString(), "HIGH")
}
@Test
def stringParseTest() {
assertEquals(Priority.withName("HIGH"), HIGH)
}
}
テストを実行すると、NPE (HIGH=null) が表示されます。
Priority as App を実行すると、必要なものがすべて得られます。 ACHTUNG HIGH HIGHER NORMAL LOW
テストを実行する前に Priority.main() を呼び出すと、同じ結果が得られ、NPE は発生しません。Priority ヘッダー (「with App」) から App trait mix-in を削除すると、すべてのテストが期待どおりにパスします。App トレイトを混在させると初期化順序に奇妙な点があることは理解していますが、私は Scala を初めて使用し (Java フィールドからの難民)、物事を理解するのに十分な経験がありません。