Bauernregeln aufzählen
Enumeration ist eine Schnittstelle, die definiert, wie sequenziell Objekte angefordert werden können. Der Bauernregeln-Enumerator produziert String-Objekte, nämlich Bauernregeln.
Eine Sammlung nicht ganz ernst zu nehmender Bauernregeln gibt's unter http://www.butterbrot.de/wahnsinn/bauer.htm. Die Funktion nextElement() löst eine NoSuchElementException aus, wenn das Ergebnis false von hasMoreElements() ignoriert wird. NoSuchElementException ist eine RuntimeException, sodass sie nicht ausdrücklich aufgefangen werden muss.
import java.util.*;
class BauernregelnEnumerator implements Enumeration
{
private int counter = 0;
private String slogan[] =
{
"Der dümmste Bauer erntet die dicksten Kartoffeln.",
"Wenn der Hahn kräht auf dem Mist, dann ändert sich "+
"das Wetter oder es bleibt wie es ist.",
"Ist der Juni kalt und nass, füllt's dem Bauern Scheun' "+
"und Fass.",
"Sind die Hühner platt wie Teller, war der Bauer "+
"wieder schneller.",
"Jodelt laut die Magd im Stall, kriegt die Kuh 'nen "+
"Herzanfall",
"Regnet es ins Hühnerhaus, holt der Hahn das Shampoo raus!",
"Liegt der Bauer im Mist, weiß er nicht wie spät es ist.",
"Liegt der Bauer tot im Zimmer, lebt er nimmer.",
"Bauen im April die Schwalben, gibt es viel Futter, Korn "+
"und Kalben."
};
public boolean hasMoreElements()
{
return ( counter < slogan.length );
}
public Object nextElement()
{
if ( !hasMoreElements() )
throw new
NoSuchElementException("Keine Bauernregeln mehr!");
return slogan[counter++];
}
}
Nun ein Beispiel, welches das Enumeration-Objekt nutzt:
public class Bauernregeln
{
public static void jederZweite( Enumeration e )
{
boolean toggle = true;
while ( e.hasMoreElements() )
{
if ( toggle ^= true )
e.nextElement();
System.out.println( e.nextElement() );
}
}
public static void main( String args[] )
{
BauernregelnEnumerator e1 = new BauernregelnEnumerator();
while ( e1.hasMoreElements() )
System.out.println( e1.nextElement() );
System.out.println();
BauernregelnEnumerator e2 = new BauernregelnEnumerator();
jederZweite( e2 );
}
}
Schön zu erkennen ist der Vorteil der Schnittstellen an der Funktion jederZweite(). Es ist der Funktion egal, was für Objekte reinkommen, Hautsache sie sind vom Typ Enumeration.