Dinamikus osztály javaban, de hogyan?

Kezdőlap Fórumok Programozás Dinamikus osztály javaban, de hogyan?

10 bejegyzés megtekintése - 1-10 / 42
  • Szerző
    Bejegyzés
  • #1890637
    linuxforum
    Felhasználó

      Szeretnék Javaban egy aktív rekord osztályt létrehozni, aminek a leszármazottaival könnyen tudnék adatbázistáblákat kezelni.Legyen az aktív rekord osztályom AR, egy konkrét leszármazottja pedig UserRecord.Az lenne a legszebb, ha a keresés az aktív rekorddal valahogy így menne:

      Code:
      UserRecord user = UserRecord.findByPK(id);

      Persze, a findByPK az AR osztályban lenne definiálva ...No, és itt haltam el. Ahogy végignéztem a netet, ezt így nem lehet. Találtam pár javas aktív rekord implelemntációt, de egyik sem tudott ilyen. A legszebbnek tűnő a find műveletnek átadja azt az osztályt paraméterül, amilyen eredményt várok.Megvallom, nagyon meglepett. Már az is, hogy osztályszintű műveleteket nem lehet felüldefiniálni, de hogy nem tudok szabadon osztályt létrehozni ...Elbizonytalanodtam. Mivel nem sokat dolgozom javaban, lehet, hogy a tudásom korlátos.Ti hogyan oldanátok meg "szépen" ezt a problémát?Hogyan tudnék az AR osztályból az aktuális leszármazottnak megfelelő objektumot generálni?

      #2207423
      pointux
      Felhasználó

        Lehet, hogy nem jól értem, de szerintem az a szó, amit keresel az az öröklődés és nem a dinamikusság.Egy (AR-ből) származtatott osztály valahogy így néz ki:

        Code:
        class UserRecord extends AR { /* UserRecord törzse */ }

        #2207424
        linuxforum
        Felhasználó

          Köszönöm, de sajnos nem pont erre gondoltam. Valóban, a class UserRecord extends AR. Amit én keresek, az a findByPK(long id) művelet definíciója, mert ugye azt nem írhatom, hogy

          Code:
          public static AR findByPK(long id) { ... }

          És azt sem - mivel az AR osztályban definiálnám -, hogy

          Code:
          public static UserRecord findByPK(long id) { ... }

          Tehát, már definiálni sem egyértelmű. Az meg külön kérdés, hogy a művelet törzsében hogyan definiálom a visszaadott objektumot, hogy ha a műveletet a UserRecord-ból hívom meg, akkor az eredménye UserRecord legyen.

          Code:
          AR record = new AR(); // Jó lenne, ha már itt egy objektumfüggő típusú változóm lehetne ...record.setDataFromCursor(getCursorFromId(id)); // Ez valami művelet, ami kimazsolázza az adatbázisból, majd betölti az objektumba.return record; // Na, itt már UserRecord objektumot kéne visszaadni, de ez sajna nem az.

          Talán valami generic szerűség kellene, de nem tudom, hogyan ...

          #2207425
          zoltan22
          Felhasználó

            Generics-el próbálkoznék. AR kapthatna egy paramétert mint generic, és akkor:

            Code:
            class AR {public static findByPK(long id) { ... }

            #2207426
            zoltan22
            Felhasználó

              Vagy akár lehetne:

              Code:
              class AR {public static findByPK(long id) { ... }

              #2207427
              pointux
              Felhasználó

                “AR record”-nak miért kéne UserRecord-ot visszaadni?De, ha pl. valamiféle lista elemet akarsz létrehozni, melynek a UserRecord az eleme AR a tárolója, akkor nem származtatott osztály kell.Valami ilyesmi lenne:

                Code:
                public interface AR { /* add, iterator stb. függvények*/ }AR URContainer...

                (Lásd.: pl. List... sőt elméletileg, ha van megfelelő beépített tároló, akkor elvileg lehet abból is származtatni.)Nyilván lehet a UserRecord is egy olyan osztály, melynek származtatott osztályai vannak, ha pl. többféle (kezelés szempontjából specifikus) UserRecordokat szeretnénk kezelni.

                #2207428
                linuxforum
                Felhasználó

                  Code:
                  class AR {public static findByPK(long id) { ... }

                  #2207429
                  linuxforum
                  Felhasználó

                    A szintaxis a következő:

                    Code:
                    class AR {

                    #2207430
                    zoltan22
                    Felhasználó

                      Ilyet sikerült összehozzak:

                      Code:
                      class AR {

                      #2207431
                      linuxforum
                      Felhasználó

                        Kezd egész bíztatóan alakulni! Már csak a statikus műveletekkel van gond.Keresni már lehene így:

                        Code:
                        class UserRecord extends AR {

                      10 bejegyzés megtekintése - 1-10 / 42
                      • Be kell jelentkezni a hozzászóláshoz.