2015-07-21 9 views
5

Quindi ho lavorato in C# per un certo numero di anni e ora sto lavorando in Java. In C#, è possibile utilizzare la parola chiave interna per nascondere una classe/metodo dalla visualizzazione pubblica, ma consentire l'accesso a determinati assembly/pacchetti se lo si concede in modo specifico. Mentre mi guardo intorno in Java, non vedo nulla che sia direttamente uguale a quello interno.C'è un modo per usare package-private in java per consentire ad altri pacchetti di accedere?

Ho saputo di pacchetto-privato. Tuttavia, questo lo tiene completamente nascosto al mondo esterno. C'è un modo in Java per consentire ad alcuni altri pacchetti di accedere al codice interno senza renderlo pubblico?

Se ti stai chiedendo perché farei queste risposte sono generalmente test di unità/integrazione o la necessità di avere certi pacchetti affidabili che accedono al codice per non duplicarlo. So che alcune persone pensano che non dovresti testare il codice privato/interno. So anche che consentire l'accesso all'interno non è in genere una buona ingegneria del software. Non sono molto interessato alla discussione su questi argomenti, solo curioso di sapere se puoi fare ciò che voglio fare.

Grazie.

+0

Non c'è alcun meccanismo in Java per fare ciò che stai cercando. –

+0

Al massimo potresti rendere la tua classe protetta. Sarà accessibile ad altre classi nello stesso pacchetto allora. – Zahrec

+2

Complementare al commento di @ Zahrec: e sarà accessibile ad altre classi al di fuori del pacchetto se queste altre classi sono un figlio della classe con il membro protetto. Questo è probabilmente il più vicino possibile a quello che vuoi. –

risposta

4

Java non ha il concetto di assiemi come in .NET (almeno non ancora). La cosa più vicina sono i bundle OSGi, che ha questo concetto (x-internal, x-friend, ecc.), Ma questo non è il core Java.

Se non si utilizza OSGi, non ci dovrebbe essere bisogno di passare attraverso questa complicazione. Assicurati che i tuoi test unitari siano nello stesso pacchetto della classe sottoposta a test. La struttura di directory di Maven (che è una buona scelta anche se non si utilizza Maven) imposta questo con src/main/java, src/test/java ecc.

1

È possibile inserire il test nello stesso nome di pacchetto in un altro punto. Questo è trattato come lo stesso pacchetto e puoi accedere alle classi private del pacchetto. Le classi di test possono essere inserite in un altro file JAR come testSomething.jar mentre il pacchetto testato fa parte di something.jar.

Questo non funziona con i pacchetti sigillati.

Problemi correlati