Is there an ArrayList Listner in Java?



我想知道是否有某种方法可以监听ArrayList。如果它添加了一些项,则该方法必须finallize。就像下面的代码,但以更好的方式:

//where form.getRetorno() is an ArrayList<String>
private void process(ManifestacaoForm form) {
validaJustificativa(form);
if (form.getRetorno().isEmpty()) {
TEvento evento = criaEvento(form);
if(form.getRetorno().isEmpty()) {
NfeDadosMsg nfeDadosMsg = criaNfeDadosMsg(evento, form);
if(form.getRetorno().isEmpty()) {
enviaReq(nfeDadosMsg, form);
}
}
}
setSuccess(form);
}

没有,但您可以扩展AbstractList,将ArrayList(或任何实现(作为成员变量,覆盖方法。注意:这不是测试,只是给你一些想法。

public class ActiveList<T> extends AbstractList<T> {
private List<T> list = new ArrayList<>();
private Collection<EventListener> listeners = new HashSet<>();
private void fireItemAdded(T item) {
//iterate through listeners and send events.
}
private void fireAddFailed(T item) {
}
private void fireRemoveFailed(int idx) {
}
private void fireItemRemoved(T item) {
}
@Override
public boolean add(T item) {
boolean added = super.add(item);
if (added) {
fireItemAdded(item);
} else {
fireAddFailed(item);
}
return added;
}
@Override
public T remove(int idx) {
T itemRemoved = super.remove(idx);
if (itemRemoved == null) {
fireRemoveFailed(idx);
} else {
fireItemRemoved(itemRemoved);
}
return itemRemoved;
}
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
}

我找到了一种使用Observable的方法:

public class ManifestacaoForm extends Observable {
private List<String> myList = new ArrayList<String>();
public void addMessage(String message){
myList.add(message);
setChanged();
notifyObservers();
}
}
public class ManifestacaoObserver implements Observer {
Observable manifestacaoForm;
List<String> myList;
public ManifestacaoObserver(Observable manifestacaoForm) {
this.manifestacaoForm = manifestacaoForm;
this.manifestacaoForm.addObserver(this);
}
@Override
public void update(Observable manifestacaoFormSubject, Object arg) {
if(manifestacaoFormSubject instanceof ManifestacaoForm) {
ManifestacaoForm manifestacaoForm = (ManifestacaoForm) 
manifestacaoFormSubject;
myList= manifestacaoForm.getMyList();
if(myList.size()>1) {
// do whatever you want
}
}
}
}
public class Foo {
private void process(ManifestacaoForm form) {
new ManifestacaoObserver(form);
validaJustificativa(form);
TEvento evento = criaEvento(form);
NfeDadosMsg nfeDadosMsg = criaNfeDadosMsg(evento, form);
enviaReq(nfeDadosMsg, form);
setSuccess(form);
}
}

最新更新