由Collections.unmodifiableList引发的重构

博客围绕Collections.unmodifiableList展开,讲述其引发的重构相关内容,但具体重构细节未在给定信息中体现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.kucun2.entity.data; import android.os.Handler; import android.os.Looper; import android.util.Log; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class SynchronizedList<T extends SynchronizableEntity> { private static final String TAG = "AsyncEntityList"; private final List<T> internalList = new CopyOnWriteArrayList<>(); private final List<ListChangeListener<T>> listeners = new ArrayList<>(); private final EntityChangeListener<T> entityChangeListener = new EntityChangeListener<>(); private Class<T> type; // 列表变更监听器接口 public interface ListChangeListener<T> { void onItemAdded(T item, int position); void onItemRemoved(T item, int position); void onSyncStarted(T item); void onSyncSuccess(T item); void onSyncFailure(T item, String error); void onListChanged(); } public Class<T> getType() { return type; } public SynchronizedList(Class<T> type) { this.type=type; } // 操作回调接口 public interface OperationCallback<T> { void onSuccess(T item); void onFailure(T item, String error); } // 注册监听器 public void addListChangeListener(ListChangeListener<T> listener) { listeners.add(listener); } // 移除监听器 public void removeListChangeListener(ListChangeListener<T> listener) { listeners.remove(listener); } // 通知所有监听器 private void notifyListeners(Runnable action) { new Handler(Looper.getMainLooper()).post(() -> { for (ListChangeListener<T> listener : listeners) { action.run(); } }); } // 异步添加元素 public void addAsync(T item, OperationCallback<T> callback) { if (item == null || internalList.contains(item)) return; // 1. 预添加状态(UI可立即显示) int position = internalList.size(); internalList.add(item); registerListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onItemAdded(item, position); listener.onSyncStarted(item); } }); // 2. 后台执行同步 new Thread(() -> { item.sync("add", new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncSuccess((T) entity); listener.onListChanged(); } }); if (callback != null) callback.onSuccess((T) entity); } @Override public void onSyncFailure(String error) { internalList.remove(item); unregisterListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncFailure((T) item, error); listener.onItemRemoved((T) item, position); } }); if (callback != null) callback.onFailure((T) item, error); } }); }).start(); } // 异步移除元素 public void removeAsync(T item, OperationCallback<T> callback) { if (!internalList.contains(item)) return; int position = internalList.indexOf(item); internalList.remove(item); unregisterListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onItemRemoved(item, position); listener.onSyncStarted(item); } }); new Thread(() -> { item.sync("remove", new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncSuccess((T) entity); } }); if (callback != null) callback.onSuccess((T) entity); } @Override public void onSyncFailure(String error) { internalList.add(position, item); // 回滚 registerListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncFailure((T) item, error); listener.onItemAdded(item, position); } }); if (callback != null) callback.onFailure((T) item, error); } }); }).start(); } // 获取不可修改的列表视图(用于RecyclerView) public List<T> getViewList() { return Collections.unmodifiableList(internalList); } // 实体变更监听器 private static class EntityChangeListener<T extends SynchronizableEntity> implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { ((T) evt.getSource()).sync(null); } } private void registerListener(T element) { if (element != null) { element.addPropertyChangeListener(entityChangeListener); } } private void unregisterListener(T element) { if (element != null) { element.removePropertyChangeListener(entityChangeListener); } } } removePropertyChangeListener?
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值