提问人:Abhinav Singh 提问时间:10/4/2023 最后编辑:Abhinav Singh 更新时间:10/6/2023 访问量:46
插入到 ArrayList 时未触发观察点
Watchpoint not triggered when inserting to ArrayList
问:
我有一个 java 程序,它有一个全局变量,我在上面放了一个观察点来跟踪这个变量的变化。我发现只有在分配到这个变量时才会触发观察点,就像这样,但是当我插入到这个列表中时,观察点没有被触发。我想这是一种正常行为。那么我们可以做任何设置,以便每次从列表中插入或删除时都会触发。ArrayList<Integer> al
al = new ArrayList<>
实际代码供参考
public MyClass {
private static ArrayList<Integer> al = new ArrayList(); Put a watchpoint here
public static void main(String args[]){
al = new ArrayList<>(); // watchpoint gets triggered here
Integer a = 1;
al.add(a); // watchpoint not getting triggered here
}
}
编辑
我的实际情况是可以从其他线程修改此列表,因此我认为在它上面放置一个观察点将是一个好主意,以了解哪个线程修改了它并查看其堆栈跟踪
答:
2赞
Zufar Sunagatov
10/4/2023
#1
那么我们可以做任何设置,以便每次从列表中插入或删除时都会触发。
好吧,如果从 中添加或删除元素,则不会触发观察点,因为对象本身不会更改。ArrayList
ArrayList
我有一个想法,您可以监视对 ArrayList 中元素的更改,您需要实现自己的自定义。这样,您可以设置回调函数,每当在列表中添加或删除元素时都会触发这些函数。class ArrayList
import java.util.ArrayList;
import java.util.function.Consumer;
public class CustomObservableArrayList<T> extends ArrayList<T> {
private Consumer<T> addCallback;
private Consumer<T> removeCallback;
public CustomObservableArrayList(Consumer<T> addCallback, Consumer<T> removeCallback) {
super();
this.addCallback = addCallback;
this.removeCallback = removeCallback;
}
@Override
public boolean add(T element) {
boolean result = super.add(element);
if (result && addCallback != null) {
addCallback.accept(element);
}
return result;
}
@Override
public boolean remove(Object element) {
boolean result = super.remove(element);
if (result && removeCallback != null) {
removeCallback.accept((T) element);
}
return result;
}
}
评论