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

问题描述 投票:3回答:1

我正试图在我的一个项目中使用带有intellij的Java 10并且遇到了警告。

enter image description here

这是说我没有导出类Server。如果你看到我的包结构,我在network包里有服务器我的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;
}

我故意不导出包网络,因为我不想这样做,但我想在父包内的网络包内使用类。

他们在这里有什么好/坏的做法,或者只是看上去很疯狂?

java intellij-idea java-10 java-module
1个回答
2
投票

如果要展开警告消息,您会发现其背后的原因

除此之外,在Java 9中,模块可能通过不导出其包来隐藏其某些类。

如果导出包中的类的公共API引用了非导出包中的类,则此类API在模块外部无用。

这种API无用的原因是没有其他模块可以实例化/访问Server类。

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

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

这将提供在运行时访问,但不是编译时间(可能是IntelliJ没有意识到它的原因),包中的publicprotected类型,以及这些类型的publicprotected成员到它们打开的模块至。

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

© www.soinside.com 2019 - 2024. All rights reserved.