Ist es möglich, eine statische Funktion in einer Kotlin-Schnittstelle anzugeben?

8

Ich möchte so etwas tun:

%Vor%

oder auch das würde für mich funktionieren:

%Vor%

aber kompiliert nicht. Gibt es dafür eine Syntax, oder muss ich das verwenden, um eine Schnittstelle für eine Fabrik zu erstellen? Oder gibt es eine andere Antwort?

Supuhstar 02.11.2016, 00:02
quelle

2 Antworten

5

Grundsätzlich kann nichts in companion object abstract oder open sein (und somit außer Kraft gesetzt werden), und es gibt keine Möglichkeit, die companion object s der Implementierungen zu verlangen, um eine Methode zu haben oder a zu definieren / zu benötigen Konstruktor in einer Schnittstelle.

Eine mögliche Lösung für Sie besteht darin, diese beiden Funktionen in zwei Schnittstellen zu trennen:

%Vor%

Auf diese Weise können Sie die erste Schnittstelle in einer Klasse implementieren und ihre companion object die andere implementieren:

%Vor%

Auch gibt es eine starke Einschränkung, dass Nur eine einzige generische Spezialisierung eines Typs kann als Supertyp verwendet werden . Daher kann dieses Modell der Serialisierung über die Schnittstellenimplementierung nicht skalierbar genug sein und mehrere Implementierungen mit unterschiedlichen% nicht zulassen." co_de% s.

    
hotkey 02.11.2016, 06:27
quelle
0

Ich bin relativ neu mit Kotlin. Hier sind meine 2 ¢

  1. Companion-Objekt ist die Instanz einer Klasse und kann daher nicht geerbt werden. Aus diesem Grund wird die abstrakte Funktion keinen Platz für die Implementierung haben. In Java erfordert das ähnliche Ergebnis, dass die anonyme Klasse die abstrakte Klasse implementiert, unterscheidet sich jedoch erheblich von der überschreibenden Methode für die Instanz einer Klasse.

  2. Die Schnittstelle kann nicht zum Erstellen einer Instanz verwendet werden, daher wird der Konstruktor in der Schnittstelle nicht verwendet.

Warum sollten Sie keine generische abstrakte Klasse erstellen? Dann würde die abstrakte oder offene Funktion für serialize () funktionieren: ToType und deserialize (serialized: ToType): FromType-Funktionen.

    
C.A.B. 28.08.2017 20:57
quelle