Le interfacce private sono mai state utilizzate nelle decisioni di progettazione? Se sì, quali sono i motivi e quando conosci la necessità di un'interfaccia privata?Decisioni di progettazione: perché e quando rendere un'interfaccia privata?
risposta
IMHO Non è possibile rendere l'interfaccia privata.
Tuttavia, spesso ho due interfacce, una per uso pubblico e una per uso interno. L'interfaccia per uso interno I rende il pacchetto locale se possibile, ad es.
public interface MyInterface {
public void publicMethod();
}
interface DirectMyInterface extends MyInterface {
public void internalUseOnlyMethod();
}
I metodi per uso interno esporre metodi che non voglio altri sviluppatori di utilizzare e/o voglio essere in grado di cambiare facilmente. La ragione per cui ho l'interfaccia è che ho diverse implementazioni che voglio usare internamente tramite un'interfaccia.
Per quale scopo è necessario il pacchetto uso interno? In oltre 10 anni di esperienza in Java non sono mai arrivato a questo schema, ma tu dici di usarlo ** spesso **. – Mot
Scrivo spesso librerie o framework usati da altri sviluppatori. Voglio mantenere le interfacce il più semplici possibile, quindi tutti i metodi che posso nascondere lo faccio esp. se non sono destinati ad essere utilizzati da altri sviluppatori. –
Deve essere protetto da pacchetto se l'interfaccia è per uso interno. In generale se l'interfaccia non ha alcun interesse al di fuori del suo ambito è una buona decisione di progettazione api to hide it perché c'è meno complessità per gli utenti dell'interfaccia e consente anche di rifattorizzarlo più facilmente, perché quando l'interfaccia è pubblica e nel API si perde la libertà di cambiarlo.
A L'interfaccia di primo livello non può essere privata. Può avere solo public
o l'accesso al pacchetto. Dalle Java Language Specification, section 9.1.1: "Interface Modifiers":
l'accesso modificatori protette e private riferiscono solo alle interfacce membri le cui dichiarazioni sono direttamente racchiuso da una dichiarazione di classe (§8.5.1).
A nidificata interfaccia può essere private
ogniqualvolta e le sue sottoclassi, se presenti, sono un dettaglio esecuzione del suo classe di livello.
Ad esempio, l'interfaccia nidificata CLibrary
di seguito viene utilizzata come dettaglio di implementazione della classe di livello superiore. Viene utilizzato esclusivamente per definire un'API per JNA, comunicata tramite l'interfaccia Class
.
Come altro esempio, questa interfaccia privata definisce un'API utilizzata da classi nidificate private che implementano simboli di formattazione personalizzati.
public class FooFormatter {
private interface IFormatPart {
/** Formats a part of Foo, or text.
* @param foo Non-null foo object, which may be used as input.
*/
void write(Foo foo) throws IOException;
}
private class FormatSymbol implements IFormatPart { ... }
private class FormatText implements IFormatPart { ... }
...
}
Mi piace il tuo secondo esempio. –
@JordanStewart - Grazie. È un esempio molto semplificato di un codice del mondo reale. –
- 1. Presentazione/spiegazione del codice e decisioni di progettazione ai membri del team
- 2. Qualcuno può spiegare le decisioni di progettazione di Autolisp/visual lisp a me?
- 3. Quali decisioni di progettazione preferirebbero gli attori di Scala invece di JMS?
- 4. S3: rendere nuovamente privata una cartella pubblica?
- 5. Perché il cast di stile C ti consente di convertire in una classe base privata?
- 6. Rendere il progettazione di Visual Studio ignorare una proprietà pubblica
- 7. Come rendere privata la mia API ma utilizzabile dall'applicazione mobile?
- 8. Autenticazione REST e chiave privata/HMAC (quando la imposto?)
- 9. Infrastruttura e infrastruttura di beta test privata
- 10. Come rendere privata una variabile in un tratto?
- 11. Quando smaltire e perché?
- 12. Progettazione e sicurezza dell'API: perché nascondere gli ID interni?
- 13. Decisioni architetturali: sito principale, forum, blog
- 14. Perché una funzione virtuale dovrebbe essere privata?
- 15. Composizione ereditaria privata VS: quando usare quale?
- 16. Implementazione di una tabella di decisioni complicata in JavaScript
- 17. modificatore di visibilità privata e sottopackage
- 18. Perché un metodo delegato è pubblico quando dichiarato in una sezione privata?
- 19. Decisioni di successione/interfaccia per il motore fisico
- 20. Eredità di classe innata e privata
- 21. Perché PuTTY utilizza il proprio formato di chiave privata quando accede al server SSH?
- 22. Progettazione di autenticazione API e hackability
- 23. Progettazione OO di libri e tag
- 24. Generics e database - un problema di progettazione
- 25. spiegazione di D_GNU_SOURCE Perché usarlo e quando?
- 26. quando e perché utilizzare JumboEnumSet
- 27. Perché e quando usare __noop?
- 28. classe PHP proprietà privata e il metodo
- 29. Funzione privata pubblica derivata privata in C++
- 30. Perché GCC consente di ereditare da una classe nidificata privata?
quando l'interfaccia riguarda qualcosa che deve essere estratto da tutto il codice che non si trova in un pacchetto specifico? – thejh
Solo un'interfaccia può essere privata se si tratta di un'interfaccia nidificata. Una classe o un'interfaccia di classe può essere pubblica o privata. – Mot