Lassen Sie uns sagen, ich habe eine Schnittstelle in Java:Klasse Schnittstelle implementieren sollten in der Lage sein, nur ein Objekt der gleichen Klasse hinzufügen
interface I {
void add(I foo);
}
, und auch zwei Klassen C und D, die diese Schnittstelle implementieren.
Gibt es eine Möglichkeit, die Schnittstelle ändern kann so, dass ich nur tun konnte:
C c = new C();
c.add(new C());
, aber nicht
c.add(new D());
?
hatte ich diese Frage auf einer Prüfung, aber meine einzige Idee war, den Instanceof Operator in der Definition des Verfahrens:
class C implements I {
public void add(I foo) {
if (foo instanceof C) {
System.out.println("instance of C");
} else {
System.out.println("another instance");
}
}
}
aber ich weiß nicht, wie die Schnittstelle ändern so dass ich denselben Effekt produziere.
Dank
Diese Methode ist nicht narrensicher. Zum Beispiel können Sie immer noch etwas wie "Klasse D implementiert I" tun. Es ist jedoch ein sehr starker Indikator für Absicht, und ein Entwickler, der das oben genannte verletzt, verdient alles, was er bekommt. –
Dunes
Um eine Warnung vor einem nicht parametrisierten Typ zu vermeiden, sollte die Deklaration "Schnittstelle I>" lauten. –
@Bohemian Danke! – Claudiu