2015-07-21 33 views
5

所以我一直在C#工作了很多年,現在正在使用Java。在C#中,您可以使用internal關鍵字來隱藏公共視圖中的類/方法,但是如果您特別授予它,則允許某些程序集/包訪問。當我在Java環顧,我沒有看到任何與內部直接相同的東西。有沒有辦法在java中使用package-private來允許其他包訪問?

我發現了package-private。但是,這使得它完全隱藏在外面的世界。 Java中有沒有辦法允許某些其他程序包訪問內部代碼而不公開?

如果您問我爲什麼要這樣做,答案通常是單元/集成測試,或者需要某些可信的程序包訪問代碼以避免重複。我知道有些人認爲你不應該測試私人/內部代碼。我也知道允許內部訪問通常不是很好的軟件工程。我對這些話題的討論並不感興趣,只是好奇你是否可以做我想做的事情。

謝謝。

+0

Java中沒有任何機制可以做你想要的。 –

+0

最多可以讓你的課程受到保護。然後,同一包中的其他課程將可以訪問它。 – Zahrec

+2

補充@ Zahrec的評論:如果這些其他類是具有受保護成員的類的子級,則該包將被包之外的其他類訪問。這可能是最接近你能達到你想要的。 –

回答

4

Java沒有像.NET中的程序集概念(至少現在還沒有)。最接近的是OSGi包,它有這個概念(x-internal,x-friend等),但這不是真正的核心Java。

如果你不使用OSGi,應該沒有必要經歷這個複雜的問題。只要確保你的單元測試與被測試的類相同。 Maven的目錄結構(即使你不使用Maven也是一個不錯的選擇)可以爲你提供這個功能,包括src/main/javasrc/test/java等。

1

您可以將測試放在另一個地方的相同包名中。這被視爲相同的包,你可以訪問包私人類。測試類可以放在另一個JAR文件中,如testSomething.jar,而測試的包是something.jar的一部分。

這不適用於密封包裝。

相關問題