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;
}
就好像模块C
为A
和B
定义了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;
那么这个问题的答案将变为";是的";。