我正在嘗試在我的一個項目中將 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
提交
取消