Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    Allora ho creato una interfaccia
    codice:
    public interface DataSaver {
    void save();
    }
    estendo i miei JInternalFrame con questa interfaccia....
    Quando faccio l'ovveraide del metodo nell'internal frame passo i valori del form?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    Allora ho creato una interfaccia
    codice:
    public interface DataSaver {
    void save();
    }
    estendo i miei JInternalFrame con questa interfaccia....
    No, secondo quanto ho detto prima, non sono gli internal frame che implementano DataSaver !! E comunque, sempre come ho detto, è (quasi) sicuramente più utile che DataSaver sia una classe "astratta".

    Ok, rifaccio l'esempio con le persone:

    Questa di seguito è la "base", che è generale:
    codice:
    public abstract class DataSaver {
        public void save() throws SQLException {
            // MOLTO abbozzato!
            // ... ottiene la Connection ...
            // ... eventuali setup su Connection ...
    
            executeSave(connection);
    
            // ... commit o rollback, chiusura connection ...
            // ... eventuale log, ecc...
        }
    
        protected abstract void executeSave(Connection conn) throws SQLException;
    }
    
    public abstract class InternalFrameBase extends JInternalFrame {
        // costruttore/i (se necessari)
        // ....
    
        public abstract DataSaver getDataSaver();
    }

    Queste di seguito sono le implementazioni per la gestione di una "persona":
    codice:
    public class InternalFramePersona extends InternalFrameBase {
        // ... campi componenti gui ...
        // ......costruttore/i, altro, ecc....
    
        public DataSaver getDataSaver() {
            DataSaverPersona saver = new DataSaverPersona();
            saver.setNome(nomeTextField.getText());
            saver.setCognome(cognomeTextField.getText());
    
            return saver;
        }
    }
    
    public class DataSaverPersona extends DataSaver {
        // campi nome e cognome
        // .... costruttore/i (può anche non esserci se si usano i setter).
    
        public void setNome(String nome) { ...... }
        public void setCognome(String cognome) { ...... }
        publid String getNome() { .... }
        publid String getCognome() { .... }
    
        protected void executeSave(Connection conn) throws SQLException {
            PreparedStatement pstmt = conn.prepareStatement("insert into blabla......");
            try {
                pstmt.setString(1, getNome());
                pstmt.setString(2, getCognome());
                pstmt.executeUpdate();
            } finally {
                pstmt.close();
            }
        }
    }
    L'ho scritto al volo, non testato ovviamente e molto abbozzato. Devi completare tu ma soprattutto comprendere il "design" in generale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    codice:
    public class DataSaverPersona extends DataSaver {
        // campi nome e cognome
        // .... costruttore/i (può anche non esserci se si usano i setter).
    
        public void setNome(String nome) { ...... }
        public void setCognome(String cognome) { ...... }
        publid String getNome() { .... }
        publid String getCognome() { .... }
    
        protected void executeSave(Connection conn) throws SQLException {
            PreparedStatement pstmt = conn.prepareStatement("insert into blabla......");
            try {
                pstmt.setString(1, getNome());
                pstmt.setString(2, getCognome());
                pstmt.executeUpdate();
            } finally {
                pstmt.close();
            }
        }
    }
    questa è una inner class di InternalFramePersona?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    questa è una inner class di InternalFramePersona?
    Nel mio esempio che ho fatto, no, non lo è (se lo avessi fatto, avrei messo DataSaverPersona prima della } di chiusura di InternalFramePersona).
    Ho pensato semplicemente che DataSaverPersona potrebbe, tecnicamente, essere utilizzata anche in altri contesti. Dopotutto è solamente una classe con delle proprietà nome/cognome e con un metodo save() (ereditato) che sa come fare il salvataggio in modo specifico attraverso l'override di executeSave.

    Quindi nulla vieterebbe di usarla altrove nel programma. Se a te non interessa il riuso, come vedi l'unico punto in cui è istanziata nel mio esempio è nel getDataSaver() di InternalFramePersona e soprattutto, restituita come il tipo più astratto che è DataSaver.
    Qui quello che conta è il polimorfismo. All'esterno di InternalFramePersona importa solo "vedere" un oggetto come DataSaver (il tipo più generico) e sapere che ha un save(). Non importa sapere se la classe concreta si chiama PincoPalla, è dentro o fuori InternalFramePersona o nel package xyz.

    Tecnicamente puoi anche farla come inner (o nested) class di InternalFramePersona, anche "privata" e non visibile all'esterno. Dovessi fare il tutto io, le terrei separate ma per un motivo molto semplice: InternalFramePersona si occupa della interfaccia grafica, mentre DataSaverPersona non ha nulla a che fare direttamente con l'interfaccia grafica (anzi, solo con JDBC), quindi non metterei tutto insieme.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.