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

Kev*_*ote 5 java java-9

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

com.company.product
com.company.product.impl_a
com.company.product.impl_b
Run Code Online (Sandbox Code Playgroud)

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

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

JDK9如何在这里提供帮助?我们是否会声明一个模块product.impl_a和另一个模块,并product.impl_b声明导出的类只能由第三个模块访问product,这取决于两个模块product.impl_aproduct.impl_b?另外,实际上不可能申报一个新的模块,它依赖于product.impl_aproduct.impl_b?其他模块只能依赖于模块product吗?

Nic*_*lai 5

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

module com.company.product { 
    export com.company.product;
}
Run Code Online (Sandbox Code Playgroud)

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