与Java(和Android)中的文件系统路径不同的包



我正在用Java构建一个SDK,它有一个公共的API和许多内部的"私有"类。我希望将公共类保持为公共类,但限制所有内部的可见性。我必须坚持使用Java8,所以我不能真正利用在以后的Java版本中引入的模块化。我们都知道,在Java中(不幸的是(包并不是真正的层次结构-例如,com.test1.test2包并不是com.test1的子包,因此在com.test1.test2内用package可见性修饰符声明的任何类都不会从com.test1内声明的类中可见。我真的不能简单地把所有的类都放在一个目录中,因为这会让处理项目成为一场噩梦。

我想知道是否可以像往常一样保持文件系统层次结构,但将类声明为位于单个包中。例如,创建2个这样的文件:

  1. Class1在路径com/test1/test2/Class1.java
package com.test1;
class Class1 {}
  1. 路径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

编译时,在源路径上同时具有src1src2。由于源路径默认情况下与

类路径拥有多个源根是常见的(默认情况下,所有Maven项目都有(,因此IDE完全支持它。

相关内容

  • 没有找到相关文章