0

我正在寻找一种在 Java 11 模块化项目中正确组织接口和实现的方法。

考虑最简单的情况:有一个接口及其多个实现。目的是仅将此接口及其工厂方法公开为模块 API。

我的接口.java

public interface MyInterface {

  String action(String input);

  //--- factory methods

  static MyInterface createSimple(Object argument){
     return new MySimpleImpl(argument);
  }    

  static MyInterface createComplex(Object a, Object b){
     return new MyComplexImpl(a,b);
  }
}

MySimpleImpl.java

class MySimpleImpl implements MyInterface { ... }

MyComplexImpl.java

class MyComplexImpl implements MyInterface { ... }

假设根包是org.company.myproject.

所以module-info.java只包含一个导出:exports org.company.myproject;


我看到了几种组织代码的方法,例如明显的是:

版本 1:将实现放入嵌套包中并生成public.

版本 2:将实现放入根包并保留它们package-private

目前我不能更喜欢任何版本,因为第一个迫使我打破模块本身内部的可见性合同,第二个污染了根包,使其意图模糊。

请帮助我理解如何准确地表达我对模块内部和外部模块类可见性的意图。可能有针对这种情况的最佳实践。

4

0 回答 0