2016-02-26 59 views
3

在C#中,我可以使用關鍵字internal來限制對類中的其他類(dll)的訪問。在java中有沒有相當於內部保護的東西?

在Java中與internal最接近的一個類,是包保護(默認)。但是這對我來說不起作用,因爲我需要訪問此類的相同Maven模塊中的其他包。

如何讓我的課程可以在我的maven模塊(jar)中的所有類中訪問,但不能在我的模塊之外的類中訪問?我已經看到this。該帖子沒有提到模塊內的其他軟件包。

+0

我想在jar中限制訪問,就像在C#中一樣,我可以限制在dll中的訪問。 – developer747

+2

在Java 9(和[項目拼圖](http://openjdk.java.net/projects/jigsaw/))之前,我認爲沒有辦法(除了把所有內容放在同一個包中)。 – assylias

+6

你讀過[this?](http://stackoverflow.com/questions/20921365/equivalent-of-internal-in-java) – MaxG

回答

0

正如您已經說過的那樣,最接近的匹配是當前的包專用修飾符。您可以通過不使用任何其他訪問修飾符關鍵字privateprotectedpublic來應用它。

Jigsaw計劃集成到Java 9中。它增加了對Java模塊化的本地支持。這將允許你隱藏來自其他模塊的包:其他模塊不能從隱藏的包中看到任何東西,甚至不能看到公共類。因此,類似於C#的訪問修改器的機制將被引入帶有模塊系統的Java 9。但是,它不會有新的訪問修飾符。

現在,你最好打賭它使用OSGi。它使您能夠通過應用一些類加載器魔法來模塊化您的Java代碼(這個魔法是由OSGi完成的,您不需要自己完成)。它不是標準JRE的一部分,但它是一個單獨的框架。在OSGi中,一個模塊被稱爲一個包。一個bundle有一個外部接口,由一組導出的包定義。其他軟件包只能使用導出軟件包中的類。但是,捆綁包本身可以使用放置在其任何包中的代碼。這允許您隱藏其他包中的課程,就像internal關鍵字一樣。

請記住,使用OSGi不是一個容易的決定。使用和設置可能相當複雜。另外,它可能不適合應用程序服務器,這也適用於某些類加載器的魔法。

相關問題