blob: 2ca6497c93dee79f7cd77f6d9d61bac586b2baca [file] [log] [blame] [raw]
package protocolsupport.utils.recyclable;
import java.util.ArrayList;
import io.netty.util.Recycler;
public class RecyclableArrayList<E> extends ArrayList<E> implements RecyclableCollection<E> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("rawtypes")
private static final Recycler<RecyclableArrayList> RECYCLER = new Recycler<RecyclableArrayList>() {
@Override
protected RecyclableArrayList newObject(Recycler.Handle handle) {
return new RecyclableArrayList(handle);
}
};
@SuppressWarnings("unchecked")
public static <T> RecyclableArrayList<T> create() {
return RECYCLER.get();
}
private final Recycler.Handle handle;
private RecyclableArrayList(Recycler.Handle handle) {
this.handle = handle;
}
@Override
public void recycle() {
for (E element : this) {
if (element instanceof Recyclable) {
((Recyclable) element).recycle();
}
}
recycleObjectOnly();
}
@Override
public void recycleObjectOnly() {
clear();
RECYCLER.recycle(this, handle);
}
}