簡體   English   中英

Java Class 保護

[英]Java Class Protection

我懷疑答案是否定的,但我想檢查一下。 如果我在 Java 應用程序中有這個結構:

-package
    -ClassA
    -subpackage
        -ClassB
        -subsubpackage
            -ClassC

I want package.subpackage.ClassB to have access to package.subpackage.subsubpackage.ClassC, but I don't want package.ClassA to have access to package.subpackage.subsubpackage.ClassC. 有什么辦法可以強制執行嗎?

不,唯一的訪問修飾符是:

  • public - 全球訪問
  • protected - package 和子類訪問
  • “包私有”(無修飾符)- package 訪問
  • private - 僅限 class 訪問

protected和 package-private 不會遞歸地授予對子包的訪問權限。 簡而言之,子包與其父 package 沒有任何關系,只是它們共享相同的名稱前綴。

這是(我相信)處理此問題的 Java 規范請求: http://jcp.org/en/jsr/detail?id=294

這應該在最近發布的 Java 7 中實現,但顯然已經被遺忘了。

讓這個工作的唯一方法是使用 內部類 而且,老實說,如果這不起作用,那么也許您應該問:“C 有什么重要的,以至於 A 不能實例化它,但 B 和至少一個其他 class 可以?”

不,沒有。 package 名稱不是層次結構如果我們有 class

foo.bar.Application

那么bar不是foo子包 package 是foo.bar並且foofoo.bar之間沒有關系,它們是完全不同的包(命名空間)。

將 ClassC 作為 ClassB 的內部 class 可以解決您的任務。

不會。Java 中的 package 層次結構對 package 可見性沒有影響。

事情要么是完全公開的,要么是包私有的。

這里沒有“朋友”package 或“父母”package 這樣的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM