带有删除和添加通知的java自定义arraylist
我想在向数组列表添加某些项或从中删除某些项时进行检测。实际上,我有如下代码:
public class myClass {
MyCustomArrayList<MyObject> al;
public void method1() {
al.add(myObject);
// Do other works
al.remove(myObject)
// Do other works
}
private void DoByEachAdd() {
//I want array list call this method by adding each item to it.
// It should be in this class because it is doing some works
// related to this class. for example changing some private variables
}
private void DoByEachRemove() {
// I want array list call this method by adding each item to it.
// It should be in this class too.
}
}
我知道数组列表不具备侦听器或某种通知或事件的功能,如果我想检测add,应该有一个自定义数组列表。比如下课:
class MyArrayList<T> {
private ArrayList<T> list;
public MyList(){
list = new ArrayList<>();
...
}
public void add(T t) {
list.add(t) {
//do other things you want to do when items are added
}
public T remove(T t) {
list.remove(t);
//do other things you want to do when items are removed
}
(我从here那里得到)
所以问题是:当remove
和add
方法被激发时,我如何通知调用DoByEachAdd
和DoByEachRemove
方法的MyArrayList
(al
)对象。有人有什么想法吗
# 1 楼答案
你需要给
myClass
到MyArrayList
的访问权限在你的
myClass
中,把对象放到你的列表中# 2 楼答案
首先,遵循命名惯例。其次,你为同一个类使用的三个类名
MyList
、MyArrayList
和MyCustomArrayList
会让人感到困惑。至于你的问题,你必须在myClass
类型的MyArrayList
内有一个实例字段(除非你想将DoByEachAdd
和DoByEachRemove
重构为static
)。这可以通过将其添加为构造函数参数来实现,例如此外,我对你的做法表示怀疑。其他具有
MyArrayList
实例的类只能使用add
和remove
方法。如果你想省去很多麻烦,让所有的方法都可见,要么把list
声明为public final
,要么把MyArrayList
变成ArrayList
的子类,例如如果坚持要从
remove
返回T
,请声明另一种方法:# 3 楼答案
您可能需要使用
Callback
机制Java为回调机制提供了接口 使用以下步骤:
接口是用抽象方法定义的 服务器知道其名称
当 服务器事件发生时实现接口,从而 给出抽象方法的代码
当客户机向服务器注册时,服务器 保存引用客户端的实例变量 其类型为接口类型
server类通过调用 该客户端的接口方法
参考以下代码,并对其进行修改以满足您的要求: 代码用于信用卡应用程序模拟。该要求与您的要求类似,即,在调用某个方法时自动触发某个方法。在下面的代码中,调用
pinChanged()
方法时会自动调用changePin()
方法要将回调/侦听器连接到信用卡,只需实现PinchangeStener方法: