为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2022-06-23 20:05:07
我正在尝试在我的一个项目中将 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;

这将在运行时提供对包中的publicand类型的访问,而不是编译时(可能是 IntelliJ 无法感知它的原因),以及这些类型的and成员对它们打开的模块的访问。protectedpublicprotected

与上述相关,如果您将opens指令更改为exports,您将不会进一步看到来自 IntelliJ 的警告。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信