gpt4 book ai didi

java - 想要在使用 java 中的回调将项目插入 arraylist 时通知

转载 作者:行者123 更新时间:2023-11-29 03:28:51 25 4
gpt4 key购买 nike

我对 java 中的回调方法实现非常感兴趣。我经历了 互联网上的一些例子,但我仍然没有信心解决这个问题。 我的问题是当一个项目被插入时,我的程序必须用一条消息通知 带有回调方法实现的列表。我该如何解决这个问题请帮忙。

谢谢

最佳答案

您应该考虑创建一个 List Decorator(设计模式),它允许您仅通过更改现有代码中的一行来通知每个 List 实现。

这是总体思路:

public interface ListListener<E> {
void onAdd(List list, E element);
void onDelete(List list, E element);
...
}

public class EventfulList<E> implements List {
private List<E> decoratedList;
private ListListener<E> listener;

public EventfulList(final List targetList) {
decoratedList = targetList;
}

public void setListener(final ListListener<E> listener) {
this.listener = listener;
}

public boolean add(E element) {
final boolean result = decoratedList.add(element);
doOnAdd(element);
return result;
}

public void doOnAdd(final E element) {
if (listener != null) {
listener.onAdd(this, element);
}
}
}

你会像这样使用它:

public class ListEventsDemo {
public static void main(String[] args) {
// Assume this is existing code.
List<String> list1 = new ArrayList<String>();
List<String> list2 = new LinkedList<String>();

// This is new code.
ListListener<String> listener = new ListListener<String>() {
public void onAdd(List list, E element) {
System.out.println(String.format("'%s' added to %s.",
element.toString(), list.getClass().getName()));
}

public void onDelete(List list, E element) {
System.out.println(String.format("'%s' removed from %s.",
element.toString(), list.getClass().getName()));
}
}

list1 = new EventfulList<String>(list1);
list2 = new EventfulList<String>(list2);
((EventfulList) list1).setListener(listener);
((EventfulList) list2).setListener(listener);

// Existing code again.
list1.add("123");
list2.add("abc");
}
}

乍一看它可能看起来有点矫枉过正,但它需要对现有代码进行较少的更改,并且您不需要子类化每个 List 实现来监视它。

关于java - 想要在使用 java 中的回调将项目插入 arraylist 时通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com