我正在用Java构建一个SDK,它有一个公共的API和许多内部的"私有"类。我希望将公共类保持为公共类,但限制所有内部的可见性。我必须坚持使用Java8,所以我不能真正利用在以后的Java版本中引入的模块化。我们都知道,在Java中(不幸的是(包并不是真正的层次结构-例如,com.test1.test2
包并不是com.test1
的子包,因此在com.test1.test2
内用package
可见性修饰符声明的任何类都不会从com.test1
内声明的类中可见。我真的不能简单地把所有的类都放在一个目录中,因为这会让处理项目成为一场噩梦。
我想知道是否可以像往常一样保持文件系统层次结构,但将类声明为位于单个包中。例如,创建2个这样的文件:
Class1
在路径com/test1/test2/Class1.java
下
package com.test1;
class Class1 {}
- 路径
com/test1/Class2.java
下的Class2
package com.test1;
class Class2 {}
因此,从逻辑上讲,这两个类最终都在同一个包下,并且可以使用package
可见性修饰符从彼此内部访问。
我知道这是非常不寻常的,可能很多IDE都不支持,但我尝试过使用普通的旧javac
,只要我通过它的完整路径指定每个源文件,它就会编译并运行得很好。除了(显然(打破"良好做法"之外,你看到了其他技术问题吗。如果说有什么不同的话,那就是一个Android项目,但它是用Java编写的。
如果要将两个.java
源文件保存在不同的目录中,但Java类属于同一个包,则需要多个源根目录。
例如,在标准Maven项目中,测试代码是如何与常规代码分离的。
因此,创建如下文件:
src1/com/test1/Class1.java
src2/com/test1/Class2.java
编译时,在源路径上同时具有 类路径拥有多个源根是常见的(默认情况下,所有Maven项目都有(,因此IDE完全支持它。src1
和src2
。由于源路径默认情况下与