|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectpl.slawas.support.EnumerationSupport<Obj>
Obj
- klasa, której elementy będą przechowywane w kolekcji enumeratorapublic abstract class EnumerationSupport<Obj>
EnumerationSupport - anstrakcyjna implementacjia enumeracji. Nieraz potrzeba
zaimplementowania enumeracji elemntów jakiejś listy, ale nie znalazłem
nigdzie implementacji enumeratora. Może z tego powodu, że wymaga on zawsze
dodatkowego wsparcia ze strony obiektu, który przesyła dany obiekt
enumeracji, chociażby dlatego, że metoda gettera (pobrania) powinna zawsze
resetować licznik getElementCounter
. Moja propozycja jest taka, że
jeżeli juz budujemy obiekt, który bedzie miał metodę pobierającą enumerator,
to niech posiada on prywatną klasę, która będzie rozszeżona niniejszą
abstrakcją. Przykład implementacji zaprezentowałem w klasie
EnumerationSample
.
EnumerationSample
,
Serialized FormField Summary | |
---|---|
protected java.util.Vector<Obj> |
elements
lista elementów |
static int |
OVERFLOW
Stała definiująca ile razy można odwołać się do metody hasMoreElements() bez pobrania elementu za pomocą metody
nextElement() . |
Constructor Summary | |
---|---|
|
EnumerationSupport()
|
protected |
EnumerationSupport(java.util.Vector<Obj> elements)
|
Method Summary | |
---|---|
EnumerationSupport<Obj> |
add(Obj element)
Dodawanie elementów do enumeratora |
abstract EnumerationSupport<Obj> |
getNewInstance()
Używanie metody resetowania licznika wiąże się z ryzykiem, że jeżeli enumerator będzie singletonem, albo stateless-em, albo innym obiektem keszowanym, dostępnym w trybie rywalizacji o dostęp do niego, to konkurencja spowoduje niewłaściwe działanie metody nextElement()
. |
boolean |
hasMoreElements()
Sprawdzenie czy są jakieś elementy |
Obj |
nextElement()
Pobranie następnego elementu. |
void |
reset()
Deprecated. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final transient java.util.Vector<Obj> elements
public static int OVERFLOW
hasMoreElements()
bez pobrania elementu za pomocą metody
nextElement()
. Zabezpieczenie przed błędem pętli nieskończonej w
postaci kodu:
Enumeration<Page> allPages = pagedResult.getAllPages(); int i = 0; while (allPages.hasMoreElements()) { logger.info("\nProba nr {}", i); i++; }
Constructor Detail |
---|
public EnumerationSupport()
protected EnumerationSupport(java.util.Vector<Obj> elements)
Method Detail |
---|
public EnumerationSupport<Obj> add(Obj element)
element
-
@Deprecated public void reset()
EnumerationSample#getHistory()
, ale metoda nie powina być
używana, ze wzgledu na możliwość nieprawidłowego działania pobierania
kolejnych elementów (nextElement()
) w przypadku rywalizacji o
dostęp do obiektu. Bardziej prawidłowym rozwiązaniem jest tworzenie
kolejnych instancji enumeratorów, z tą samą listą elementów. Sprowadza
się to do prawidłowej implemetacji metody getNewInstance()
.
getNewInstance()
public boolean hasMoreElements()
hasMoreElements
in interface java.util.Enumeration<Obj>
public Obj nextElement()
nextElement
in interface java.util.Enumeration<Obj>
public abstract EnumerationSupport<Obj> getNewInstance()
nextElement()
. Dlatego wywołanie enumeratora powinno się odbyć za pomocą wywołania tej
metody, która wywoła konstruktor EnumerationSupport(Vector)
, tym
samym przekazując listę elementów do nowej instancji enumeratora.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |