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:
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.
Ich bin relativ neu mit Kotlin. Hier sind meine 2 ¢
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.
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.
Tags und Links static-methods interface abstract kotlin static-functions