2017-01-06 1 views
0

Was ich versuche zu erreichen, ist ein einfaches Muster, das ich in Java verwende und sollte in Kotlin nach der documentation machbar sein. Ich möchte nur eine enum-Klasse mit ein paar konstanten Definitionen deklarieren, die dieselben abstrakten Funktionen implementieren.Wie abstrakte Funktion in Enum-Konstanten zu implementieren

Mein Problem ist, dass ich es nicht schaffen kann, meinen Code kompilieren zu lassen. Ich bekomme immer den gleichen Fehler:

modifier abstract not allowed here

Hier ist der Code:

enum class Program { 
    HOME { 
     override fun readableName(context: Context): String { 
      return context.getString(R.string.program_home) 
     } 
    }, 
    WEEKEND { 
     override fun readableName(context: Context): String { 
      return context.getString(R.string.program_weekend) 
     } 
    }, 
    SHOPPING { 
     override fun readableName(context: Context): String { 
      return context.getString(R.string.program_shopping) 
     } 
    }; 

    abstract fun readableName(context: Context): String 
} 

Ich habe sogar versucht, mit dem Beispielcode aus der Dokumentation und doch auch dies nicht kompiliert.

Konnte jemand eine Idee über dieses ungerade Problem haben? Übrigens benutze ich momentan Kotlin 1.0.6.

+0

"Enum anonyme Klasse" - welcher Teil davon ist anonym? Vielleicht meintest du "Wie benutze ich Enum mit einer abstrakten Funktion in Kotlin?" Oder so ähnlich? – voddan

+1

@voddan Basierend auf der Frage, würde ich sagen, du hast Recht. Ich habe den Titel bearbeitet. –

Antwort

0

Alles klar ... also habe ich herausgefunden, wo das Problem war und es war nicht das, was ich erwartet hatte. @ Kirill Rakhman hatte Recht, mit dem Enum-Code war nichts falsch. Ich hatte ein Problem mit kapt, das aus irgendeinem Grund meine Projektanmerkungen nicht generieren konnte. Genauer gesagt benutzte ich - was ich als experimentell vermisste - das neu verfügbare Gradle Kapt Plugin dokumentiert here.

ich zu den vorherigen Kapt Einstellungen zurückgesetzt

durch Ersetzen
apply plugin: 'kotlin-kapt' 

von

kapt { 
    generateStubs = true 
} 

Und es hat funktioniert! Nicht sicher, warum die Kompilierung fehlgeschlagen ist, obwohl ich mein Enum deklariert habe.

Vielen Dank für diejenigen, die Zeit in sie aussehen nahm zu, und wenn Sie eine Idee haben, warum die experimentelle Kapt Plugin nicht benahm, wie diese Antwort fühlen Sie sich frei zu erwarten kommentieren, ich möchte gerne wissen, was

:) passiert
0

Ich habe gerade versucht, den Code und es ist normalerweise 1.0.6-Release-Studio2.2-1 mit Kotlin Plugin

Vielleicht können Sie nur versuchen, zu aktualisieren Android Studio/Kotlin Plugin kompiliert?

Verwandte Themen