hinzugefügt wird Angenommen, ich eine Arraylist in KlasseA haben und ein Verfahren send
in ClassB genannt, wie kann ich invoke send
, wenn etwas in die Arraylist in KlasseA hinzugefügt wird?Wie eine Java-Funktion aufzurufen, wenn einige Daten in eine Arraylist
Antwort
Sie ArrayList
erweitern sollten, und überschreiben die add
Methode einen Zuhörer zu nennen:
class MyArrayList<T> extends ArrayList<T> {
private MyArrayListListener<T> listener;
public void setListener(MyArrayListListener<T> listener) {
this.listener = listener;
}
@Override
public boolean add(T t) {
if(listener != null) {
listener.elementAdded(t);
}
return super.add(t);
}
}
interface MyArrayListListener<T> {
void elementAdded(T element);
}
Und es wie folgt verwenden:
MyArrayList<String> list = new MyArrayList<>();
list.setListener(new MyArrayListListener<String>() {
@Override
public void elementAdded(String element) {
// do whatever you want
}
});
list.add("elementAdded gets called now");
Aus Gründen der Konsistenz würde ich auch 'addAll' überschreiben. –
Für ein gutes Design würde ich' ArrayList' nicht erweitern, sondern die Zusammensetzung über Vererbung bevorzugen. – Kayaman
Für die meisten Anwendungsfälle ist es die beste Idee zu definieren eine benutzerdefinierte Klasse mit und add
Methode, die eine List
als ein Feld enthält. Dann können Sie Ihre benutzerdefinierte Logik immer dann ausführen, wenn der add
Ihrer Klasse aufgerufen wird.
Sie könnten eine Wrapper-Klasse für List
erstellen, so dass Sie so etwas wie
ListenableList<String> list = new ListenableList<>(new ArrayList<>());
list.addListener(...);
public class ListenableList<T> implements List<T> {
private List<T> list;
public ListenableList(List<T> list) {
this.list = list;
}
public void add(T element) {
list.add(element);
invokeAddEvent();
}
// etc.
ListenableList
List
würde implementieren tun könnte und delegieren alle Methoden auf die zugrunde liegende Liste (ArrayList
im Beispiel), sowie erzeugen Veranstaltungen. Dadurch können Sie verschiedene Ereignisse zum Hinzufügen, Entfernen und sogar zum Abrufen von Elementen verwenden.
Es ist eine grundlegende proxy pattern.
- 1. Verschiebe eine Arraylist-Daten in eine andere Arraylist in C#
- 2. Was passiert, wenn Sie eine Variable an einige Daten binden?
- 3. Wie bekomme ich Daten von Android-Datenbank in eine Arraylist
- 4. Von Textdatei in eine ArrayList
- 5. Wie mische ich eine ArrayList?
- 6. Wie eine zwei Dimension Arraylist
- 7. Überprüfen, ob eine ArrayList eine andere ArrayList als Element enthält
- 8. Arraylist in eine TextBox laden
- 9. PL/SQL Wie eine Funktion aufzurufen, ohne
- 10. Wie eine Basisklasse virtuelle Funktion aufzurufen, die auf eine Funktion
- 11. Wie man eine ArrayList in Java einkapselt
- 12. Wie blase ich eine Arraylist in Java?
- 13. Wie speichere ich eine ArrayList in SugarORM?
- 14. Wie eine veränderbare Zusammenfassung Arraylist in Java
- 15. Wie können Sie eine geschachtelte HashMap in eine ArrayList umwandeln
- 16. Wie eine gespeicherte Prozedur aufzurufen ado.net mit
- 17. wie eine Eigenschaft eines Nullreferenzobjekt aufzurufen
- 18. Startgröße für eine ArrayList
- 19. Gibt es eine Möglichkeit, eine Funktion in ListView aufzurufen?
- 20. Zusammenführen von zwei sortierten Arraylist in eine sortierte Arraylist
- 21. Verwenden gespeicherte Prozedur einige Daten in eine Tabelle einfügen
- 22. Gibt es eine sichere Möglichkeit, `call` aufzurufen, um eine Funktion in JavaScript aufzurufen?
- 23. Gibt es eine Möglichkeit, eine Methode aufzurufen, wenn eine Eigenschaft einer Klasse gesetzt ist?
- 24. Wie Zuhörer in eine andere Funktion aufzurufen in android
- 25. Verwendet! = In einer Schienenansicht eine andere Möglichkeit, eine Hilfsmethode aufzurufen?
- 26. Wie man eine ArrayList auf eine Karte setzt
- 27. Wie eine AWS Lambda-Funktion in Swift aufzurufen
- 28. Kopieren von Daten von einer eindimensionalen Arraylist in eine zweidimensionale Arraylist mit Java
- 29. Wie durchläuft man eine ArrayList mit XML?
- 30. Wie man eine ArrayList <ArrayList <String>>, die eine andere ArrayList enthält <String>
Sie könnten einen Listener in 'ClassA' einrichten, der' ClassB' aktualisiert, wenn sich die Daten ändern. Können Sie etwas Code mit uns teilen? –
Wie genau soll die Methode aufgerufen werden? Möchten Sie, dass es automatisch auf Basis eines 'Ereignisses' aufgerufen wird, wenn sich Daten in der ArrayList ändern oder möchten Sie' a' ändern und die Funktion selbst aufrufen? – progyammer
@TimBiegeleisen Wie man einen Listener von einer Klasse zu einer anderen macht, haben Sie irgendeine Referenz? –