Java 中的包可见性问题

Package Visibility Issue in Java

详情:

我正在尝试使用以下目录结构从命令行构建一个 java 项目:

proj/
    Makefile
    Main.java
    lexer
    tokens
    ast
    interpreter
    lib

问题:

我假设 Main.java 可以访问所有四个文件夹中的所有 classesenumsinterfacesannotations。但是,如果我想在 tokens 包中使用 enum ,有什么办法吗?顺便说一句,我的意思是我应该使用什么访问说明符来完成我的用例?

我在问这个问题之前使用的链接:

-https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

-https://medium.com/virtuslab/on-the-missing-package-private-or-why-java-is-better-than-kotlin-in-this-regard-4a1c9ecbe40c#:~:text=The%20default%20access%20modifier%20in,类%20in%20the%20same%20package.&text=It %20was%20hardly%20used%20and,fields%20when%20inheritance%20was%20needed.

-http://gauss.ececs.uc.edu/Courses/c694/lectures/Visibility/visibility.html

提前致谢。

编辑:Main 可以从包中导入并且 main 在默认包中。

假设您使用的是 java8 及之前:

    默认情况下,
  1. Main 将无法访问所有 类 和枚举
  2. Main 将有权访问 类 和 Main.java
  3. 中定义的枚举
  4. Main 中的方法将有权访问内部 类 和枚举
  5. Main 将有权访问 类 和在其他包
  6. 中定义为 public 的枚举
  7. Main 将可以访问 类 它在其他包中扩展(它们应该至少受到保护)

其他 类 也将遵循类似的访问策略。 (主要没什么特别的)

请参考

  1. Tutorials
  2. Modifiers