Es ist legal dies in Java zu tun:Wie kann ich ein Methodenargument in Java benötigen, um mehrere Schnittstellen zu implementieren?
void spew(Appendable x)
{
x.append("Bleah!\n");
}
Wie kann ich diese (Syntax nicht legal) zu tun:
void spew(Appendable & Closeable x)
{
x.append("Bleah!\n");
if (timeToClose())
x.close();
}
Ich mag würde, wenn möglich Anrufer zu zwingen, Objekte zu verwenden, die beide Anfügbar und schließbar, ohne dass ein bestimmter Typ erforderlich ist. Es gibt mehrere Standardklassen, die dies tun, z.B. BufferedWriter, Print usw.
Wenn ich meine eigene Schnittstelle definieren
interface AppendableAndCloseable extends Appendable, Closeable {}
, die seit den Standardklassen wird nicht funktionieren, die Appendable und Verschließbare implementieren nicht implementieren meine Schnittstelle AppendableAndCloseable (es sei denn, ich verstehe nicht, Java so wie ich denke, ich mache ... leere Interfaces fügen noch über ihre Superschnittstellen hinaus Einzigartigkeit hinzu).
Der nächstgelegene ich denken kann, ist eine der folgenden Funktionen ausführen:
eine Schnittstelle auswählen (z Appendable) und Laufzeittests verwenden das Argument, um sicherzustellen, ist ein
instanceof
die anderen. Nachteil: Problem wurde zur Kompilierzeit nicht behoben.erfordern mehrere Argumente (Fänge Kompilierung-Korrektheit sieht aber dorky):
void spew(Appendable xAppend, Closeable xClose) { xAppend.append("Bleah!\n"); if (timeToClose()) xClose.close(); }
Das ist sicher fehlt. Aber was genau ist deine Frage? – NawaMan