2016-06-29 2 views
0


Ich habe eine Schnittstelle, die meine Klassen implementieren, und ich habe eine enum mit cousstructor, die eine Class<?> als ein Argument nimmt. Etwas wie Enum(Class<?> class), und die Enumeration hat eine Funktion, um diese Klasse zurückzugeben. Wie kann ich so machen, dass class Argument muss meine Schnittstelle implementieren, und wie schliesse ich später values() der enum, erhalten Sie die Klassen, init sie und legen Sie sie in eine HashMap.Iterate über eine Enum, die Klassen speichert, dann initiieren Sie die Klassen und setzen Sie sie in eine Karte

Danke für Hilfe.

Antwort

3

Verwenden Sie ein upper bound auf dem Platzhalter:

Class<? extends YourInterface> 
+0

Okay, aber wie kann ich in eine später für Schleife init sie und setzten sie in eine HashMap ? Danke für eine schnelle Antwort. – ArsenArsen

+0

Wenn 'clazz' eine Instanz von' Class ', dann ist das Ergebnis von' clazz.newInstance() 'eine Instanz von' MyInterface'. –

+0

Vielen Dank, mein Herr! Ihre Hilfe und etwas Googeln hat mich gerettet! – ArsenArsen

0
public enum MyEnum { 

    VALUE_1(ClassA.class); 

    private Class<? extends MyItf> clazz; 

    MyEnum(Class<? extends MyItf> clazz) { 
    this.clazz = clazz; 
    } 

    public Class<? extends MyItf> getClazz() { 
    return clazz; 
    } 
} 

Dann Schleife auf enum.values():

Map<MyEnum, Class> map = new HashMap<>(); 

for(MyEnum e : MyEnum.values()) { 
    map.put(e, e.getClazz()); 
} 
Verwandte Themen