Ich kam gerade zu einem Problem mit dem Entwerfen einer Schnittstelle, deren Methoden variable Anzahl von Eingabeargumenten haben können.Entwerfen einer Java-Schnittstelle: eine Methode mit variabler Anzahl von Parametern
Das Problem ist, für die Klassen, die diese Schnittstelle implementieren, erfordern sie unterschiedliche Anzahl von Eingabeargumenten.
public class FoobarA implements FoobarSerialization<FoobarA> {
@Override
public Foobar serialize(FoobarA obj, int bar) {
//...
}
}
public class FoobarB implements FoobarSerialization<FoobarB> {
@Override
public Foobar serialize(FoobarB obj, Date date, String str) {
//...
}
}
Gibt es ein gutes Design oder einen echten Weg, um dieses Problem zu lösen? Ich weiß, dass die Methode in der Schnittstelle kann als deklariert werden:
Foobar serialize(T... obj);
Aber ich bin nicht sicher, ob dies eine gute Praxis war eine Schnittstelle so zu entwerfen.
Irgendwelche Gedanken?
Update: Meine Absicht, eine Schnittstelle zu verwenden, kam aus der Sammlung von Klassen, die für verschiedene Zwecke serialisiert und deserialisiert werden müssen. Sie dienen als Komponenten unter derselben Domäne. Aber ihre Serialisierungsmethoden sind ziemlich unterschiedlich, insbesondere in Anbetracht ihrer Abhängigkeiten von Objekten und Diensten, die keine gemeinsamen Merkmale oder Klassen teilen.
Ich denke, die richtige Frage hier zu stellen ist: Was ist der beste Ansatz, wenn es eine Reihe von Klassen gibt, die die gleichen Verhaltensweisen teilen (Serialisierung, Deserialisierung, DoSomething usw.), aber unterschiedliche Eingabeargumente haben?
Dies ist nicht die Art von Dingen, die Sie eine Schnittstelle für haben sollten. Der Vorteil einer Schnittstelle besteht darin, dass Sie, wenn Sie eine Instanz der Schnittstelle haben, diese immer mit den gleichen Argumenten aufrufen können, und das ist hier nicht der Fall. –
@LouisWasserman Einverstanden. Es scheint keine gute Idee zu sein, in solchen Fällen eine Schnittstelle zu verwenden. Was ist das Beste, was du hier benutzen kannst? –
Die beste Sache zu verwenden ist nichts. Schreiben Sie einfach die Methoden direkt; Versuche keine verführerische Erbmagie. –