我创建了一个列表,用于观察由用户的控制台输入触发的更改,假设用户输入一个字符串,那么该字符串应该在观察列表中订阅。
您应该像这样创建一个customList:
public class CustomList<T> extends ArrayList<T> {
public static void main(String[] args) {
CustomList<String> customList = new CustomList<>();
customList.add("First Adding");
}
public boolean add(T t) {
boolean b = super.add(t);
System.out.println("you just add :" + t.toString());
return b;
}
}
如果你想有很多自定义事件,你可以这样做:
public class CustomList<T> extends ArrayList<T> {
public static void main(String[] args) {
CustomList<String> customList = new CustomList<>(new EventCustomList<String>() {
public void remove(String s) {
System.out.println("you just remove :" + s);
}
public void add(String s) {
System.out.println("you just add :" + s);
}
});
customList.add("First Adding");
}
private EventCustomList event;
public CustomList (EventCustomList<T> event) {
this.event = event;
}
public boolean add(T t) {
boolean b = super.add(t);
event.add(t);
return b;
}
public T remove(int index) {
T t = super.remove(index);
remove(index);
return t;
}
public interface EventCustomList<T> {
void add(T t);
void remove(T t);
}
}
或者你可以使用BackedList
,就像这个主题如何在java中添加侦听器
public static void main(String[] args) {
BackedList<String> list = new BackedList();
list.addListener(new BackedListListener<String>(){
@Override
public void setOnChanged(ListChangeEvent<String> event) {
if (event.wasAdded()) {
event.getChangeList().forEach(e->{
// do whatever you need to do
System.out.println("added: " + e);
});
}
if (event.wasRemoved()) {
// do whatever you need to dl
event.getChangeList().forEach(e->{System.out.println(e + " was removed");});
}
}
});