diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2013-02-03 16:17:10 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2013-02-03 16:17:10 +0100 |
| commit | b137206a85a7b831ffedc8289fea5ccbd6331270 (patch) | |
| tree | 86b9a363f255f5a047303c4700441692f2d74141 /main/src/cgeo/geocaching/utils | |
| parent | 5ddc2beec34023b94b0f3f6489dc16ba40271e4c (diff) | |
| download | cgeo-b137206a85a7b831ffedc8289fea5ccbd6331270.zip cgeo-b137206a85a7b831ffedc8289fea5ccbd6331270.tar.gz cgeo-b137206a85a7b831ffedc8289fea5ccbd6331270.tar.bz2 | |
Use a standard Callable interface for lazy initialized lists
Diffstat (limited to 'main/src/cgeo/geocaching/utils')
| -rw-r--r-- | main/src/cgeo/geocaching/utils/LazyInitializedList.java | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/main/src/cgeo/geocaching/utils/LazyInitializedList.java b/main/src/cgeo/geocaching/utils/LazyInitializedList.java index d9c3897..27649e8 100644 --- a/main/src/cgeo/geocaching/utils/LazyInitializedList.java +++ b/main/src/cgeo/geocaching/utils/LazyInitializedList.java @@ -1,58 +1,63 @@ package cgeo.geocaching.utils; import java.util.AbstractList; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Callable; -public abstract class LazyInitializedList<ElementType> extends AbstractList<ElementType> { +public abstract class LazyInitializedList<ElementType> extends AbstractList<ElementType> implements Callable<List<ElementType>> { private volatile List<ElementType> list; - private void initializeList() { + private List<ElementType> getList() { if (list == null) { - synchronized (this) { - if (list == null) { - list = loadFromDatabase(); + synchronized(this) { + try { + list = call(); + if (list == null) { + Log.e("LazyInitializedList.getList: null result"); + } + } catch (final Exception e) { + Log.e("LazyInitializedList.getList", e); } } } + return list; } - protected abstract List<ElementType> loadFromDatabase(); - @Override public boolean add(final ElementType element) { - initializeList(); - return list.add(element); + return getList().add(element); } @Override public ElementType set(final int index, final ElementType element) { - initializeList(); - return list.set(index, element); + return getList().set(index, element); } @Override public ElementType remove(final int index) { - initializeList(); - return list.remove(index); + return getList().remove(index); } @Override public void add(int index, final ElementType element) { - initializeList(); - list.add(index, element); + getList().add(index, element); } @Override public int size() { - initializeList(); - return list.size(); + return getList().size(); } @Override public ElementType get(final int index) { - initializeList(); - return list.get(index); + return getList().get(index); + } + + @Override + public void clear() { + list = new ArrayList<ElementType>(); } } |
