# Wie Enum an Funktion "übergeben" ?



## Verjigorm (17. Okt 2008)

Hallo,

ich denke ich stehe grad aufm Schlauch.

Ich habe mehrere Enums.
Jedes Enum hat eine Funktion getImage(), jedem Enum-Element ist ein Bild zugeordnet.

Nun wollte ich eine simple Funktion schreiben, die als Übergabeparameter "ein Enum bekommt".
Die Funktion soll für alle Elemente des Enums die getImage-Funktion aufrufen.

Und irgendwie bin ich zu deppert, den Übergabeparameter zu realisieren
Momentan habe ich das (wohl eher sehr unschön) gelöst:
Ein KSKB soll verdeutlichen, was ich versucht habe:


```
public class Enumtest 
{
	public enum Enum1 
	{
		A, B;
		
		public void getImage() 
		{
			System.out.println("Image");
			//....
		}
	}
	
	public enum Enum2 
	{
		C, D;
		
		public void getImage() 
		{
			System.out.println("Image");
			// ...	
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
                //Wie realisiere ich den Übergabeparameter?
                //Geht das nicht besser/schöner?
		getImages(Enum1.values());
		getImages(Enum2.values()); 
	}

        //Wie realisiere ich den Übergabeparameter?
	private static void getImages(Object[] array)
	{
		for(Object o : array)
		{
			if(o instanceof Enum1)
			{
				((Enum1)o).getImage();
			}
			
			if(o instanceof Enum2)
			{
				((Enum2)o).getImage();
			}
		}
	}
}
```

mfg Verjigorm


----------



## SlaterB (17. Okt 2008)

Enum als Parameter bring dich nicht weiter als Object,
du brauchst schon eine gemeinsame Basisklasse (geht bei Enums nicht) oder ein Interface:


```
interface ImageHolder
{

    public void getImage();
}


class Enumtest
{
    public enum Enum1
        implements ImageHolder
    {
        A, B;

        public void getImage()
        {
            System.out.println("Image");
        }
    }

    public enum Enum2
        implements ImageHolder
    {
        C, D;

        public void getImage()
        {
            System.out.println("Image");
        }
    }

    public static void main(String[] args)
    {
        getImages(Enum1.values());
        getImages(Enum2.values());
    }

    private static void getImages(ImageHolder[] array)
    {
        for (ImageHolder o : array)
        {
            o.getImage();
        }
    }
}
```


Spielerei:


```
public static void main(String[] args)
    {
        getImages(Enum1.class);
        getImages(Enum2.class);
    }

    private static <T extends Enum & ImageHolder>void getImages(Class<T> c)
    {
        for (T o : c.getEnumConstants())
        {
            o.getImage();
        }
    }
```


----------



## Verjigorm (17. Okt 2008)

also kann ich nur das value-array des Enums übergeben?
Gibt sonst keine andere Möglichkeit?

edit: Ok "Spielerei" zu spät entdeckt


----------



## SlaterB (17. Okt 2008)

siehe noch das Ende meines ersten Postings, da habe ich was hinzugefügt


----------



## Verjigorm (17. Okt 2008)

Wobei ich sagen muss, ich würde mir schwertun, wenn ich die Funktion verstehen müsste, so wie sie bei dir als "Spielerei" abgebildet ist.


----------

