Java 带有删除和添加通知的自定义arraylist
我想在向数组列表添加某些项或从中删除某些项时进行检测。实际上,我有如下代码:Java 带有删除和添加通知的自定义arraylist,java,android,arraylist,Java,Android,Arraylist,我想在向数组列表添加某些项或从中删除某些项时进行检测。实际上,我有如下代码: public class myClass { MyCustomArrayList<MyObject> al; public void method1() { al.add(myObject); // Do other works al.remove(myObject) // Do other works
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.
}
}
公共类myClass{
MyCustomArrayList al;
公共无效方法1(){
al.add(myObject);
//做其他工作
al.移除(myObject)
//做其他工作
}
私有无效Dobyachadd(){
//我希望数组列表通过添加每个项来调用此方法。
//它应该在这门课上,因为它正在做一些工作
//与此类相关。例如,更改某些私有变量
}
私有void dobyachremove(){
//我希望数组列表通过添加每个项来调用此方法。
//它也应该在这门课上。
}
}
我知道数组列表不具备侦听器或某种通知或事件的功能,如果我想检测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
}
类MyArrayList{
私有数组列表;
公共MyList(){
列表=新的ArrayList();
...
}
公共无效添加(T){
列表。添加(t){
//在添加项目时执行其他您想执行的操作
}
公共T移除(T){
列表。删除(t);
//在删除项目时执行其他您想执行的操作
}
(我从你那里得到的)
所以问题是:如何通知
MyArrayList
(al
)的对象当remove
和add
方法被激发时,调用dobyachadd
和dobyachremove
方法。有人有什么想法吗?你需要将myClass
访问MyArrayList
class MyArrayList<T> {
private ArrayList<T> list;
private myClass theClass;
public MyList(myClass theClass){
list = new ArrayList<>();
this.theClass = theClass;
...
}
public void add(T t) {
list.add(t) {
//do other things you want to do when items are added
theClass.DoByEachAdd();
}
public T remove(T t) {
list.remove(t);
//do other things you want to do when items are removed
theClass.DoByEachRemove
}
您可能需要使用
回调
机制
Java提供了带有接口的回调机制
使用以下步骤:
changePin()
方法时会自动调用pinChanged()
方法
public interface PinChangeListener {
public void pinChanged();
}
public CreditCard {
public PinChangeListener pinChangeListener;
private int pin;
public changePin(int pin) {
this.pin = pin;
if (pinChangeListener != null) {
pinChangeListener.pinChanged();
}
}
}
要将回调/侦听器连接到信用卡,只需实现PinchangeStener方法:
creditCard.pinChangeListener = new PinChangeListener() {
public void pinChanged() {
System.out.println("The pin has been changed");
}
};
public T removeT(T t) {
remove(t);
// do some stuff
return someT;
}
首先,遵循命名约定。其次,您为同一类使用的三个类名,
MyList
、MyArrayList
和MyCustomArrayList
会让人感到困惑。至于您的问题,您必须在MyArrayList
类型的myClass
中有一个实例字段(除非您想将dobyachadd
和dobyachremove
重构为静态的)。这可以通过将其作为构造函数参数添加来完成,例如
// inside MyArrayList
private ArrayList<T> list;
private final myClass instance;
public MyArrayList(myClass instance) { // <-- NOT MyList
list = new ArrayList();
this.myClass = myClass;
}
如果您坚持要从删除返回T
,请声明另一种方法:
creditCard.pinChangeListener = new PinChangeListener() {
public void pinChanged() {
System.out.println("The pin has been changed");
}
};
public T removeT(T t) {
remove(t);
// do some stuff
return someT;
}