2015-02-26 4 views
13

Kotlin haben bereits Anzahl der „statischen“ Methoden für Enum-Klasse, wie values und valueOfWie kann ich "statische" Methode für enum in Kotiln erstellen?

Zum Beispiel habe ich Enum

public enum class CircleType { 
    FIRST 
    SECOND 
    THIRD 
} 

Wie kann ich statische Methode hinzufügen, wie random(): CircleType haben? Erweiterungsfunktionen scheinen in diesem Fall nicht zu funktionieren.

Antwort

35

Genau wie bei jeder anderen Klasse, können Sie ein Klasse-Objekt in einer Enum-Klasse definieren:

enum class CircleType { 
    FIRST, 
    SECOND, 
    THIRD; 
    companion object { 
    fun random(): CircleType = FIRST // http://dilbert.com/strip/2001-10-25 
    } 
} 

Dann werden Sie in der Lage, diese Funktion als CircleType.random() zu nennen.

BEARBEITEN: Beachten Sie die Kommata zwischen den Enum-Konstanteneinträgen und dem schließenden Semikolon vor dem Companion-Objekt. Beide sind jetzt obligatorisch.

+6

Wenn Sie möchten, dass es von Java als statische Methode angezeigt wird, müssen Sie es auch mit [platformStatic] kommentieren. –

+1

Sieht aus wie der neue Weg dies zu tun ist "Companion-Objekt" anstelle von "Klassenobjekt". http://blog.jetbrains.com/kotlin/2015/03/follw-up-new-class-object-syntax/ –

+1

Funktioniert das noch? Es ist nicht für mich! –

Verwandte Themen