Domanda

Si prega di ricodificare questa domanda per includere le lingue per cui è rilevante

Quindi il mio libro Java conteneva un intero capitolo sulle classi nidificate, ma terminava con la nota che dovresti usarle veramente solo quando si tratta di "modellare le relazioni di composizione e implementare gli interni di una classe che vuoi nascondere".Quindi parliamo di quando vorresti utilizzare le classi nidificate e alcuni esempi.

È stato utile?

Soluzione

Una classe nidificata/interna è semplicemente una classe che viene utilizzata specificatamente solo nel contesto di un'altra classe, che non ha un proprio file di classe.Se è collegato a un'istanza, può essere istanziato solo nel contesto di un'istanza della classe genitore;può vedere dati privati ​​o solo dati statici privati ​​se si tratta di una classe statica.

Il sito degli sviluppatori Java ha un tutorial sulle classi nidificate con un esempio:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

Un paio di esempi di utilizzo:

  • Nascondi un'implementazione concreta di un'interfaccia:

(Pensando a una sessione di database per uno strumento come Hibernate):Supponiamo di avere un'interfaccia Session e una SessionFactory che restituisce un'istanza di una Session.La classe concreta SessionImpl che implementa l'interfaccia Session potrebbe essere una classe interna della factory che sa come costruirla e inizializzarla.

  • Fornire informazioni sull'implementazione di un'interfaccia:

Nel framework web Wicket, ogni componente della GUI ha un "modello" associato, il cui compito è collegare i dati al componente.L'interfaccia è simile a:

public interface IModel extends IDetachable {
 public Object getObject();
 public Object setObject();
}

Supponiamo di avere una logica speciale per recuperare i dati per un componente GUI personalizzato che hai scritto.Poiché nessun altro componente recupera i dati nello stesso modo, è possibile utilizzare una classe anonima nel punto in cui viene fornito l'IModel per occuparsi del recupero dei dati.Se hai un altro punto nella stessa classe in cui devi riutilizzare l'implementazione IModel, potresti renderlo una classe interna.Successivamente, se hai bisogno del modello altrove, potresti convertirlo in una classe di livello superiore.

Generalmente si utilizza una classe interna in una situazione in cui è necessaria una definizione di classe, ma quella classe è utilizzabile solo o ha senso solo nel contesto della classe genitore.

Altri suggerimenti

Un vero e proprio utilizzo di vita che ho avuto con le classi nidificate, era in un impostazioni globali oggetto.

La classe padre era un Singleton, con le classi nidificate come impostazioni categorie.

  • Impostazioni
    • impostazioni dei file
    • Le impostazioni di stampa
    • Etc.

Non c'era vero e proprio punto nel rendere l'oggetto interiore come classi separate, come loro sarebbe inutile per loro al di fuori della portata della classe impostazioni.

Io uso classi nidificate per incapsulare gli algoritmi che sarebbero di solito fatto come un metodo con un sacco di argomenti. Io uso classe che ha dati grezzi e ho messo gli algoritmi in un file separato nella classe annidata (tramite parola chiave parziale). In questo modo posso mettere le proprietà per tale algoritmo e dei suoi dati (di lavoro) vive dopo algoritmo è fatto. So che può essere fatto facilmente senza classi nidificate, ma questo si sente giusto perché algoritmo è appositamente costruito per classe genitore.

   public partial class Network
    {
            partial void initFDLF()
            {
                fdlf=new FDLF(this);
            }

        public FDLF fdlf;
        public class FDLF
        {
            internal bool changed=true;
            internal bool pvchange=true;
            public double epsilon = 0.001;
            public bool fdlfOk=false;
            public void init(){...}
            public void run(){...}
            ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top