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

我正在尝试在我的一个项目中将 Java 10 与 intellij 一起使用,但遇到了警告。

http://img2.mukewang.com/62b457090001ed5f21910574.jpg

这是说我没有导出类服务器。如果您看到我的包结构,我的包内有服务器,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发疯了?


素胚勾勒不出你
浏览 166回答 1
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 的警告。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java