pl.slawas.support
Class EnumerationSupport<Obj>

java.lang.Object
  extended by pl.slawas.support.EnumerationSupport<Obj>
Type Parameters:
Obj - klasa, której elementy będą przechowywane w kolekcji enumeratora
All Implemented Interfaces:
java.io.Serializable, java.util.Enumeration<Obj>

public abstract class EnumerationSupport<Obj>
extends java.lang.Object
implements java.util.Enumeration<Obj>, java.io.Serializable

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.

Version:
$Revision: 1.5.2.1 $
Author:
Slawomir Cichy <slawas@slawas.pl>
See Also:
EnumerationSample, Serialized Form

Field 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

elements

protected final transient java.util.Vector<Obj> elements
lista elementów


OVERFLOW

public static int OVERFLOW
Stała definiująca ile razy można odwołać się do metody 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

EnumerationSupport

public EnumerationSupport()

EnumerationSupport

protected EnumerationSupport(java.util.Vector<Obj> elements)
Method Detail

add

public EnumerationSupport<Obj> add(Obj element)
Dodawanie elementów do enumeratora

Parameters:
element -
Returns:
własnie modyfikowany enumerator

reset

@Deprecated
public void reset()
Deprecated. 

Resetowanie licznika pobrań elementów podczas wywołania getter-a w obiekcie właścicela. Przykład użycia 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().

See Also:
getNewInstance()

hasMoreElements

public boolean hasMoreElements()
Sprawdzenie czy są jakieś elementy

Specified by:
hasMoreElements in interface java.util.Enumeration<Obj>

nextElement

public Obj nextElement()
Pobranie następnego elementu.

Specified by:
nextElement in interface java.util.Enumeration<Obj>

getNewInstance

public 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() . 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.

Returns:
nowa instancja enumeratora


Copyright © 2014 Sci Software. All Rights Reserved.