我正在尝试在我的一个项目中将 Java 10 与 intellij 一起使用,但遇到了警告。这是说我没有导出类服务器。如果您看到我的包结构,我的包内有服务器,network我的模块信息文件如下所示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;}我故意不导出包网络,因为我不想这样做,但我想在父包内的网络包内使用类。他们在这里有什么好的/坏的做法,还是只是intelliJ发疯了?
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
如果您将警告消息展开,您会发现其背后的原因
除此之外,在 Java 9 中,一个模块可能会通过不导出它们的包来隐藏它的一些类。
如果导出包中的类的公共 API 引用非导出包中的类,则此类 API 在模块之外没有用处。
这样的 API 没有用的原因是没有其他模块可以实例化/访问Server
类。
值得注意的是,在您的模块描述符中,您已包含
opens com.money.heist.server.core.network to com.google.guice;
这将在运行时提供对包中的public
and类型的访问,而不是编译时(可能是 IntelliJ 无法感知它的原因),以及这些类型的and成员对它们打开的模块的访问。protected
public
protected
与上述相关,如果您将opens
指令更改为exports
,您将不会进一步看到来自 IntelliJ 的警告。
添加回答
举报
0/150
提交
取消