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

标签 java intellij-idea java-10 java-module

我试图在我的一个项目中使用 Java 10 和 intellij,但遇到了警告。

enter image description here

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

最佳答案

如果你将警告信息展开,你会找到它背后的原因

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 不感知它的原因),publicprotected 包中的类型,以及这些类型的 publicprotected 成员到它们打开的模块。

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

关于Java 10,Intellij 警告(类未导出,在同一模块中访问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755914/

相关文章:

java - Kotlin 与 JDK 10

java - Graphql Java Hello World : Adding a sub-schema to parent schema is failing

java - 如何创建游戏!使用 JetBrains IntelliJ Idea 13 的框架 JAVA 应用程序?我只找到Scala项目

java - 单元缓存映射加载失败 - GWT

android-studio - 是否可以抑制AndroidStudio/IntelliJ中十六进制值的误报错误?

java - Main 方法不在模块内部运行

java - 导入java.awt无法解析

java - 为什么在线程调用启动时不调用定义的 run() 方法?

javascript - Google map + 街景问题 - 如何禁用 Photo Sphere

java - 如何计算处理3中两个给定日期之间的天数?