Java中如何要求传递性工作



com.demo.invoice能否访问com.demo.product.service

module com.demo.product {
exports com.demo.product.service to com.demo.order;
}
module com.demo.order {
exports com.demo.order.orderservice;
requires transitive com.demo.product;
}
module com.demo.invoice {
requires com.demo.order;
}

Java中如何要求传递性工作?

如果模块A过渡地需要模块B,那么任何读取模块A的模块也读取模块B。换句话说,以下内容:

module A {
requires transitive B;
}
module B {}
module C {
requires A;
}

就好像模块CAB定义了requires指令。当一个模块的类型作为其公共API的一部分,而这些类型来自另一个模块时,可以使用requires transitive


com.demo.invoice可以访问com.demo.product.service吗?

否,com.demo.invoice模块无法访问com.demo.product.service包中的类型,即使所述模块实际上读取了com.demo.product模块。这是因为:

exports com.demo.product.service to com.demo.order;

限定的exports指令。除了com.demo.product模块本身,只有com.demo.order模块可以访问com.demo.product.service包中的类型。如果您将指令更改为:

// unqualified exports
exports com.demo.product.service;

或者:

// include 'com.demo.invoice' in qualified exports
exports com.demo.product.service to com.demo.order, com.demo.invoice;

那么这个问题的答案将变为";是的";。

最新更新