Java 10,Intellij警告(类未导出,正在同一模块中访问)

在尝试使用 Java 10 和 IntelliJ 的项目中,作者遇到了关于类未导出的警告。尽管作者有意不导出 'network' 程序包,但希望在父程序包中使用该包内的类。警告提示模块可能隐藏了未导出包中的类,这会导致公共 API 在外部无法使用。解决方案是理解 'opens' 和 'exports' 的区别,并根据需要调整 module-info 文件,以消除 IntelliJ 的警告。
摘要由CSDN通过智能技术生成

我试图在我的一个项目中将Java 10与intellij一起使用,并遇到警告.

 

 

就是说我不导出服务器类.如果您看到我的程序包结构,则我的服务器位于网络程序包中,我的module-info文件如下所示

 

module core {
    requires com.google.guice;

    requires io.netty.all;

    requires config;

    requires org.apache.logging.log4j;

    exports com.money.heist.server.core;

    opens com.money.heist.server.core.network to com.google.guice;
}

我故意不导出程序包网络,因为我不想这样做,但是我想在父程序包中的网络程序包中使用类.

他们在这里有好/坏做法,还是只是在疯狂?

最佳答案

如果您要展开警告消息,则会找到其背后的原因

 

 

In addition to that, in Java 9 a module may hide some of its classes
by not exporting their packages.

If the public API of a class in an exported package references a class
from a non-exported package, such API isn’t useful outside of the
module.

此类API无效的原因是,没有其他模块可以实例化/访问Server类.

值得注意的是,在模块描述符中,您已经包含了

 

opens com.money.heist.server.core.network to com.google.guice;

它将在运行时提供但不在编译时(可能是IntelliJ无法感知的原因)访问包中的公共和受保护类型,并打开这些模块的公共和受保护类型的成员至.

与此相关,如果将opens指令更改为export,则不会再看到IntelliJ的警告.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值