NullPointerException Singleton

di il
3 risposte

NullPointerException Singleton

Ciao ,
Sto implementando un command pattern ed un singleton per gestire un DB con alcuni comandi
Ho scelto di gestire il DB ( SQLite) come singleton perchè non voglio istanziare più oggetti del DB, ma avere un accesso globale
Tramite un comando , in questo caso "!rank" devo poter leggere dei dati sul DB.
Non li conosco benissimo e sto cercando di capire perchè dopo la richiesta di esecuzione del comando ottengo un NULLPointerException
Vi chiedo un aiuto perchè ho sicuramente pasticciato qualcosa. Se non sono stato sufficientemente chiaro vi prego di farmelo sapere
Grazie
Posto qui il codice

MAIN :

public class Main {

    private static discCommandFactory send;
    static List<String> params = new ArrayList<>();

    public static void main(String[] args)  {

        SQLite sqLite = SQLite.DB(); // Inizializzo il singleton
        sqLite.connection("jdbc:sqlite:/***/***/***/user");

        params.add("!rank");
        send.executeCommand(params); // eseguo il commando
    }
}

Classe SQlite Singleton
https://hastebin.com/ozusaliwap.c (modificato aggiornato visibilità metodi , non erono static )

Classe Command pattern
https://hastebin.com/kegataqejo.c

(modificato testo domanda)

3 Risposte

  • Re: NullPointerException Singleton

    Scritto così send sembra prorio null...
  • Re: NullPointerException Singleton

    Scusa nel cercare di semplificare il programma da quello originale ho dimenticato di scrivere
    
    send = discCommandFactory.init();
    
    Il quale era già presente in quell'originale , però vedo che da lo stesso errore in mancanza di init(),
    Questa demo ora funziona, rivedo il programma originale e vi scrivo dopo
  • Re: NullPointerException Singleton

    Ciao ,
    Ho trovato l'errore , come diceva java , ho voluto accedere al DB senza prima istanziare il singleton...
    Avrei solo due domande :

    1) Se elimino l'inizializzazione del singleton , funziona lo stesso ovvero basta solo chiamare SQLite.connection(),
    ma in SQLlite.DB() viene creata l'istanza , Non deve essere istanziato almeno una volta ?
    
      //SQLite sqLite = SQLite.DB(); // Inizializzo il singleton
            SQLite.connection("jdbc:sqlite:/***/***/***/user"); 
    

    2) Negli errori che ho fatto ho scoperto il warning "accessed via instance reference"
    cioè invece di scrivere così
    
       SQLite sqLite = SQLite.DB(); // Inizializzo il singleton
       [u]SQLite[/u].connection("jdbc:sqlite:/***/***/***/user"); 
    
    scrivevo così come se fosse un oggetto (sqlite in minuscolo)
    
           SQLite [u]sqLite[/u] = SQLite.DB(); // Inizializzo il singleton
            [u]sqlite[/u].connection("jdbc:sqlite:/***/***/***/user"); 
    
    Quali rischi corro in quel caso ?

    Grazie
Devi accedere o registrarti per scrivere nel forum
3 risposte