繁体   English   中英

JDK9模块如何帮助“封装范围的子包”?

[英]How will JDK9 modules help for 'package-scoped sub-packages'?

我想知道JDK9模块。 假设您有以下3个包:

com.company.product
com.company.product.impl_a
com.company.product.impl_b

product.impl_aproduct.impl_b中的类只能由包product的类访问。 用户应该只使用product包中的类。 您可以想象,传递某些标志或属性将决定是否在内部使用impl_aimpl_b

在JDK8-中,您必须在impl_aimpl_b public创建这些类。 这有点糟糕 ,因为可以欺骗用户他们可以使用这些类。 它完全有效并且允许。

JDK9如何在这里提供帮助? 我们将宣布一个模块product.impl_a ,另一个用于product.impl_b并声明该出口类仅由第三模块访问product ,这将取决于两个模块product.impl_aproduct.impl_b 另外,实际上不可能声明一个依赖于product.impl_aproduct.impl_b的新模块? 其他模块只能依赖于模块product吗?

您的问题中没有任何内容似乎表明这三个软件包需要最终用于不同的JAR /模块。 如果他们不这样做,只需将它们放入同一个JAR中,使用所述的可见性修饰符,并使用以下模块声明:

module com.company.product { 
    export com.company.product;
}

然后模块com.company.product中,您可以像往常一样使用所有包中的代码,但是从外部只能访问 com.company.product

您可以让包impl_aimpl_b中的类public并将包导出到特定module (合格的导出),您可以使用以下约定:

exports com.company.product.impl_b to third.module;

所以,在你的情况下考虑这些

module first.module { 
    export com.company.product.impl_a to second.module;
    export com.company.product.impl_b to third.module;
}

这意味着com.company.product.impl_a只被导出到second.module ,现在读取first.module可以访问impl_a包中的类的公共类型,同样com.company.product.impl_b只是导出到third.module

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM