Hei
Onko Javassa mahdollista selvittää ohjelmallisesti minkä nimisia olioita tietystä luokasta on luotu? Yksittäisestä oliostahan voidaan selvittää se mistä luokasta se on luotu, esimerkiksi seuraavanlaisella metodilla:
/**kertoo luokan josta olio on luotu
* AE: o!=null
* LE: Luokan nimi, josta olio o on luotu
*/
public static String luokanNimi(Object o) {
return o.getClass().toString();
}Tarvitsen omituisuutta omassa peliprojektissa, jossa voidaan luoda dynaamisesti hahmoja Hahmo-luokasta ja tarkoituksena olisi että ohjelma pystyisi pitämään kirjaa hahmoista.
Tee luokka, joka pitää kirjaa luoduita hahmoista jotenkin tähän tyyliin tyyliin
public class Kirjanpitaja {
private Vector hahmot = new Vector();
public Hahmo luoHahmo(String nimi) {
Hahmo uusiHahmo = new Hahmo(nimi);
hahmot.addElement(uusiHahmo);
return uusiHahmo;
}
}Eli luot hahmon jollain metodilla joka merkitsee hahmon muistiin sitä luodessa. Mitään automaattista kirjausta Javassa ei ole. Periaatteessa voit tehdä tuon kirjanpidon Hahmo-luokan sisäänkin staattisiksi metodeiksi, joita aina kutsutaan Hahmon konstruktorista.
public class Hahmo {
private static Vector kaikkiHahmot = new Vector();
public Hahmo(String nimi) {
kaikkiHahmot.addElement(this);
}
}Itse käyttäisin esimerkiksi HasMap:piä jolloin nimi toimisi avaimena ja Hahmo arvona.
Jolloin hahmo laitettaisiin mappiin ja haetaan esim. näin:
public class JokuLuokka{
private Map hahmot;
....
public JokuLuokka(){
hahmot = new HashMap();
.....
}
.....
public void LisaaHahmo(String hahmonNimi,Hahmo hahmo){
hahmot.put(hahmonNimi,hahmo);
}
.....
public Hahmo HaeHahmo(String hahmonNimi){
return (Hahmo)hahmot.get(hahmonNimi);
}
}Näin siis silloin jos halutaan nimenomaan nimillä pitää kirjaa hahmoista
Aihe on jo aika vanha, joten et voi enää vastata siihen.