Mi chiedevo perché Java sia stato progettato senza la direttiva friend
disponibile in C++ per consentire un controllo più preciso su quali metodi e variabili di istanza sono disponibili al di fuori del pacchetto in cui è stata definita una classe.Perché la direttiva friend manca in Java?
Non vedo alcuna ragione pratica né alcun inconveniente particolare, sembra solo un problema di progettazione, ma qualcosa che non creerebbe alcun problema se aggiunto al linguaggio.
+1 per l'incapsulamento :) – fresskoma
-1 per l'incapsulamento. Questo è un malinteso comune. È semplicemente sbagliato. Anche se è vero che 'friend' * può * essere utilizzato per interrompere l'incapsulamento, così le altre funzionalità possono essere utilizzate in modo improprio. Usato correttamente, 'friend' * migliora l'incapsulamento * perché abilita un controllo di accesso più fine:' friend' sostituisce l'uso di 'public', non di' private'. [Spiegazione tecnica alle FAQ C++] (http://www.parashift.com/c++-faq-lite/friends.html#faq-14.2) (Detto questo, sono completamente soddisfatto della visibilità del pacchetto, ma rivendico che 'amico 'L'incapsulamento delle interruzioni è ancora sbagliato.) –
@KonradRudolph Assolutamente d'accordo. Le classi di amici sono essenziali per la separazione delle preoccupazioni. Ad esempio, ho una classe 'Serializer' che dovrebbe essere autorizzata a scrivere nei campi di un'istanza, quindi gli do l'accesso come amico. Altre classi, non possono scrivere specificamente nei campi e devono passare attraverso l'interfaccia che fornisco. L'unico modo per farlo in Java è mettere tutto nello stesso pacchetto. – crush