Quando utilizzare il modificatore di accesso predefinito?

0

Voglio capire, dal punto di vista del progetto, in quali situazioni dovrei usare il modificatore di accesso predefinito e quando non dovrei.

Ho trovato questo domanda correlata, che fornisce alcune spiegazioni di base, come mai sto cercando una risposta che avrà come target incapsulamento e i principi singolo motivo di cambiamento e indirizzarli in modo più professionale.

    
posta Ilya Gazman 07.07.2014 - 17:37
fonte

3 risposte

6

L'accesso predefinito è altrimenti noto come livello di pacchetto privato o protetto ... a tua scelta, non veramente ha un termine, ma è utile pensarlo in questo modo.

Se si scava all'interno del sorgente per java.lang lo si vedrà spesso - consentendo ad altre classi all'interno di java lang di accedere ad alcuni interni di questa classe senza esporre quegli interni a tutto il mondo.

Basta dare un'occhiata, un esempio di questo è sizeTable in java.lang.Integer ( grepcode ) che consente di inserire un singolo punto in cui sono archiviate queste informazioni. Poiché questo è associato a stringSize (appena al di sotto di esso) che è probabilmente utilizzato in java.lang.String , significa che non è necessario averne due copie o esporle. Altri metodi nell'area mostrano anche più di questa relazione Integer / String.

Pensando ancora a questo, hai Integer.toString(int i) e String.valueOf(int i) - entrambi fanno cose molto simili. Anche se è discutibile se vuoi avere la capacità di fare la stessa cosa in due classi ... se lo fai, vuoi solo avere il codice in un posto - il che ti rimanda ad avere un incapsulamento a livello di pacchetto.

Mettere le cose all'interno dello stesso pacchetto dovrebbe essere una parte importante dell'incapsulamento. Le classi all'interno di un pacchetto dovrebbero funzionare a stretto contatto l'una con l'altra. Significa che queste classi dovrebbero essere in grado di guardare le rispettive parti interne e lavorare con loro. Evita di avere java.lang.FunkyStringConstatns seduto là fuori per tutto il mondo a vedere ... e una volta che il mondo lo vede come qualcosa di pubblico, significa che non si può andare a cambiarlo.

Questo ha meno significato quando si lavora all'intero progetto dall'inizio alla fine e non ci sono API pubbliche. È più un 'sì, è lì' allora. Ma se lavori su API pubbliche, vorrete che le volte sia possibile condividere i dati senza condividerli con il mondo.

    
risposta data 07.07.2014 - 18:15
fonte
1

Il modificatore di accesso predefinito rende il membro visibile nell'intero pacchetto. Questo rende l'utilizzo su un membro che è mutabile in qualche modo solo marginalmente meglio di una variabile globale. L'unico utilizzo possibile a cui posso pensare è creare costanti che è possibile utilizzare come dettaglio di implementazione all'interno di un pacchetto. Se in un secondo momento decidi di eliminare o modificare le costanti, nessun codice al di fuori del pacchetto si interromperà.

    
risposta data 07.07.2014 - 18:15
fonte
0

La tua domanda è generica, quindi la risposta è quando aiuta. Tuttavia, posso citare due casi in cui mi trovo spesso a utilizzare i modificatori predefiniti.

In primo luogo, sono utili quando vuoi testare un metodo privato ma non vuoi renderlo disponibile per le classi figlio o al di fuori del pacchetto.

Un altro caso d'uso consiste nel rifattorizzare una classe nidificata in un file separato mantenendo al tempo stesso accessibili i membri della classe genitore privata.

AGGIORNAMENTO: sono consapevole del fatto che i miei esempi vanno contro le migliori pratiche (interfaccia di test, non implementazione), ma ritengo che queste scorciatoie siano accettabili quando sono sotto pressione per fornire rapidamente e la base di codice è di dimensioni moderate.

    
risposta data 07.07.2014 - 18:17
fonte

Leggi altre domande sui tag