Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有模块的依赖限制_Java_Android_Architecture_Dependencies - Fatal编程技术网

Java 没有模块的依赖限制

Java 没有模块的依赖限制,java,android,architecture,dependencies,Java,Android,Architecture,Dependencies,假设有一个类似于 Layer App Layer Foo Layer Bar 现在所有层都在不同的包中,但在同一个模块中(我正在寻找一种设置,其中所有层都可以位于同一个模块中) 这是使用限制 Layer App should only know (and use) Layer Foo and Layer Bar Layer Foo should only know (and use) Layer Bar Layer Bar should not know any of the above la

假设有一个类似于

Layer App
Layer Foo
Layer Bar
现在所有层都在不同的包中,但在同一个模块中(我正在寻找一种设置,其中所有层都可以位于同一个模块中)

这是使用限制

Layer App should only know (and use) Layer Foo and Layer Bar
Layer Foo should only know (and use) Layer Bar
Layer Bar should not know any of the above layers

如何在不创建3个不同模块的情况下实现此依赖项限制,并在
gradle
构建脚本中声明这些依赖项。

虽然不是万无一失,但您可以这样做来帮助控制事情:

为每个层声明一个类,表示该层的API(例如Foo)。创建一个泛型构造函数,以便它获取任何有效调用层的API类的实例。如果您足够勤奋,总是通过API类访问层,那么您应该可以

e、 g.在伪代码中:

class Foo {

  public Foo<T>(T caller) {
    if caller is App {
      return
    }
    throw new Exception("invalid call to layer")
  }

  ObjA NewObjA()
  int SomeFuncB()
}

class App {

  private Foo foo

  public App<T>(T caller) {
    if caller is Foo or caller is Bar {
      throw new Exception("invalid call to layer")
    }
    foo = new Foo(this)
  }

  ObjC NewObjC()
  int SomeFuncD()
}
class-Foo{
公共Foo(T呼叫者){
如果调用方是应用程序{
返回
}
抛出新异常(“对层的调用无效”)
}
ObjA NewObjA()
int-SomeFuncB()
}
类应用程序{
私人富福
公共应用程序(T呼叫者){
如果调用方是Foo或调用方是Bar{
抛出新异常(“对层的调用无效”)
}
foo=新foo(本)
}
ObjC NewObjC()
int SomeFuncD()
}

您甚至可以从API类的每一层内部类创建类。

请看这里:一般来说,这是通过严格遵守强制规则、自我控制和/或代码审查来实现的。一个工具也可能有用。@TomVanRossom这太棒了。你知道kotlin的替代品吗?