Classi nidificate , ad esempio. classi anonime, sono spesso più conveniente rispetto alla creazione di classi separate, soprattutto quando si lavora con qualcosa come il modello di comando o listener di eventi. Per esempio:
Tasto JButton = nuovo JButton ();
button.addActionListener ( nuovo ActionListener () {
Override
pubblico vuoto actionPerformed (ActionEvent e) {
// ... Fare qualcosa di utile
}
});
Ma arriva un momento in cui la classe nidificata diventa così ingombrante che il codice diventa illeggibile. E a volte si vuole riutilizzare la stessa classe in un altro posto - qualcosa che è difficile con le classi interne anonime.
La risposta potrebbe essere quella di cambiare la classe annidata in una classe pubblica di livello superiore (o un cittadino di prima classe, se volete) che esiste nel proprio file (ad es. SomethingUsefulActionListener.java ). Ma fare questo manualmente può richiedere molto tempo ed è soggetto a errori.
Eclipse ha un paio di refactoring e soluzioni rapide che contribuiscono a rendere il lavoro molto più facile. Conversione di una classe interna anonima a una classe di livello superiore richiede solo due refactoring e vi porterà un paio di secondi invece di minuti. A (nome) classe interna richiede solo un refactoring. E il passaggio di argomenti per la nuova classe è anche facile se si utilizzano alcune delle correzioni rapide di Eclipse.
Pubblicità
Convertire la classe interna anonima in un livello superiore
Conversione di una classe interna anonima in una classe di livello superiore richiede 2 refactoring principali: Conversione in una classe annidata e poi convertire la classe annidata a una classe di livello superiore. Se si dispone di una classe annidata (es. Una classe interna denominata), poi basta iniziare al punto 4.
Qui ci sono le istruzioni, ma c'è anche un video qui sotto con un esempio veloce.
1. Convertire la classe interna anonima a una classe annidata in piedi sulla classe costruttore anonimo 'e scegliendo Refactor> Converti Anonymous Class a nidificati ... (o Alt-T, O ). Apparirà una finestra di dialogo che richiede per i dettagli di classe nidificati.
2. Inserire un nome per la nuova classe nidificato, selezionate pubblico come la visibilità e deselezionare dichiarare il tipo nidificato come definitiva .
3. Fare clic su Ok. Eclipse creerà una nuova classe annidata all'interno della classe contenitrice e lasciare la chiamata al costruttore in cui la classe anonima utilizzata per dichiarare.
4. Ora convertire la classe annidata in una classe di livello superiore in piedi sul nome della classe e scegliendo Refactor> Converti tipo membro Top Level ... (o Alt-T, V ). Apparirà una finestra di dialogo che richiede per il nome dell'istanza racchiude.
5. (Facoltativo) Se si desidera accedere alla classe contenitrice entro la nuova classe, quindi immettere un nome per il campo che verrà assegnato alla classe. Io di solito lasciare vuoto.
6. Fare clic su Ok. Eclipse sarà creare la nuova classe ( UsefulAction.java ) e spostarlo in un nuovo file nello stesso pacchetto.
Ecco un breve video per mostrare come questo è facile. Nell'esempio, convertiremo un anonimo interno ActionListener classe per una classe denominata UsefulAction.java .
Pubblicità
Passando argomenti dalla classe racchiude nella nuova classe
Che dire quando la classe annidata accede campi nella classe di inclusione? Come ottenere facilmente campi privati della classe contenitrice nella nuova classe di livello superiore?
Non c'è un modo one-shot per fare questo, ma ci sono le tecniche per farlo andare un po 'più veloce. Un trucco è tramite le seguenti fasi:
Prima di tutto assicuratevi di aver creato una classe annidata chiamata (passi 1-3).
Copia e incolla i campi privati rilevanti della classe contenitrice nella classe annidata.
Generazione automatica di un costruttore per la classe annidata in base ai campi appena copiato ( Alt + Maiusc + S, O ).
Passare l'errore di costruzione ( Ctrl +. ), dove viene creata un'istanza della classe annidata e aggiungere i campi al costruttore.
Il modo più semplice per vedere come funziona è quello di guardare il seguente video. Nell'esempio, passerò il campo nome e l'indirizzo per la nuova classe.
Nessun commento:
Posta un commento
Nota. Solo i membri di questo blog possono postare un commento.