Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: luokista ja olioista

Juuso [30.01.2006 00:34:08]

#

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.

FooBat [30.01.2006 00:51:44]

#

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);
  }
}

maka78 [31.01.2006 07:43:59]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta