Hallo, ich versuche gerade eine Klasse zu schreiben die der "Services" vom XNA Framework nachempfunden ist. Wem das nichts sagt versuche ich es mal kurz zu erklären. Ich habe ein array vom Typen Object und speichere dort alle möglichen Objekte. Von jeder Klasse allerdings nicht mehr als eine Instanz. Nachher kann ich mir dann ein bestimmtes Objekt wieder aus dem array holen indem ich nur den Objekttypen des Objektes das ich haben will an die getter Methode übergebe. Ich tappe da ziemlich im dunkeln und wollte mir hier mal professionellen Rat holen.
Hier mein erster Ansatz:
Java:
publicclassServices{privatefinalint MAX =10;privateint last;privateObject[] objects;publicServices(){
last =0;
objects =newObject[MAX];}/**
*
* @param object The Service which should be added.
*/publicvoidadd(Object object){
objects[last]= object;
last++;}/**
*
* @param object The object type of the requested Service.
* @return The requested Service. Returns null if no Service was found.
*/publicObjectget(Object object){for(int index =0; index < last; index++){if(object.getClass().getName().equals(objects[index].getClass().getName())){return objects[index];}}returnnull;}}
Ein Aufruf der get Methode dachte ich, könnte dann so aussehen:
Kurze Erklärung. Eine Map hat keys und zu jedem key einen value. Da key und value jeweils einen beliebigen Typ haben dürfen, hat tfa vorgeschlagen für den key die Klasse zu wählen und der value ist dann jeweils das Objekt. Da es jeden key ja nur einmal geben darf und dieser genau einen value hat, bekommst du das, was du willst: genau ein Objekt pro hinterlegter Klasse.
Du machst eine Abbildung (Map, zb: HashMap), die dein Class-Objekt abbildet auf das eigentliche Service-Objekt. So musst du kein Array durchsuchen. T ist ein Typparameter, der den Typ deines Service angibt, also z.B. Camera.
Vielen Dank erst mal, aber ich glaube so ganz verstanden habe ich es noch nicht. Ich habe den Code mal angepasst (Die Services Klasse soll static sein, hatte ich eben noch nicht).
Wie komme ich jetzt an den Typen des übergebenen Objektes? Also wie übergibt man einen Objekttypen? Habe jetzt als platzhater einfach Objekttyp.class geschrieben. Ich weiß auch nicht was die get methode als paramter erwarten soll.
Java:
publicclassServices{staticHashMap<Class<?>,Object> map =newHashMap<Class<?>,Object>();publicServices(){}staticvoidadd(Object object){
map.put(Objekttyp.class, object);}staticObjectget(/**Was muss hier rein?*/){return map.get(Objekttyp.class);}}