Hirdetés

Keresés

Új hozzászólás Aktív témák

  • -v-
    addikt

    Nem jó sajnos, mert statikus függvénnyel is érem el a statikus változót, így nem tudom felüldefiniálni a függvényeket.

    Mutatom mi a konkrét scenario:

    public class DatabaseManager extends OrmLiteSqliteOpenHelper {

    private static final AtomicInteger sUsageCounter = new AtomicInteger(0);
    private static DatabaseManager sInstance = null;

    public static synchronized DatabaseManager getHelper(Context context) {
    if (sInstance == null) {
    sInstance = new DatabaseManager(context);
    }
    sUsageCounter.incrementAndGet();
    return sInstance;
    }

    @Override
    public void close() {
    if (sUsageCounter.decrementAndGet() == 0) {
    super.close();
    sInstance = null;
    }
    }
    }

    Na most ebből lett két külön osztály, és ahhoz jelenleg ezt a kódot mind le kell kopiznom. :(

    Miért erőlteted ezt a staticot, én se értem ... amúgy ezek a helper classok mennyire bad practice... előjöttek a rossz emlékek :D Miért használsz prefixet a fieldeknél? Az se túl jó gyakorlat manapság :U

    (#5278) WonderCSabo: hát, a kód duplikáció az sose jó :(

    Amúgy: java-ban nincs függvény :U Metódus van. De szerintem az adattag is c++ terminológia.

    edit: ja most látom, hogy androidról beszélünk :D

  • floatr
    veterán

    Nem jó sajnos, mert statikus függvénnyel is érem el a statikus változót, így nem tudom felüldefiniálni a függvényeket.

    Mutatom mi a konkrét scenario:

    public class DatabaseManager extends OrmLiteSqliteOpenHelper {

    private static final AtomicInteger sUsageCounter = new AtomicInteger(0);
    private static DatabaseManager sInstance = null;

    public static synchronized DatabaseManager getHelper(Context context) {
    if (sInstance == null) {
    sInstance = new DatabaseManager(context);
    }
    sUsageCounter.incrementAndGet();
    return sInstance;
    }

    @Override
    public void close() {
    if (sUsageCounter.decrementAndGet() == 0) {
    super.close();
    sInstance = null;
    }
    }
    }

    Na most ebből lett két külön osztály, és ahhoz jelenleg ezt a kódot mind le kell kopiznom. :(

    Namost lehet h én értelmezem félre a kódot, de ha factory metóduson keresztül létrehozva az osztály egy singleton, akkor a példányváltozón kívül egyetlen további változónak sem kéne statikusnak lennie. Neme?

    Vagy a példánnyal van a gondod? Mert arra olyan példákat láttam, hogy ahány osztály, annyi változó. Ha külön maganer van típusonként, akkor abban vannak a példányok tömbben, mapben miegymás

  • M_AND_Ms
    veterán

    Nem jó sajnos, mert statikus függvénnyel is érem el a statikus változót, így nem tudom felüldefiniálni a függvényeket.

    Mutatom mi a konkrét scenario:

    public class DatabaseManager extends OrmLiteSqliteOpenHelper {

    private static final AtomicInteger sUsageCounter = new AtomicInteger(0);
    private static DatabaseManager sInstance = null;

    public static synchronized DatabaseManager getHelper(Context context) {
    if (sInstance == null) {
    sInstance = new DatabaseManager(context);
    }
    sUsageCounter.incrementAndGet();
    return sInstance;
    }

    @Override
    public void close() {
    if (sUsageCounter.decrementAndGet() == 0) {
    super.close();
    sInstance = null;
    }
    }
    }

    Na most ebből lett két külön osztály, és ahhoz jelenleg ezt a kódot mind le kell kopiznom. :(

    Ezt a nyitó-záró logikát tedd egy külön statikus függvénybe, bemenő paraméterként az ős db kezelővel, melynek konstruktora hívja meg a statikus nyitó-záró függvényt, önmagát átadva neki.
    Ugyanígy járj el a close-zal is.
    Természetesen a db kezelőid továbbra is singletonként példányosítsd!

Új hozzászólás Aktív témák