我有以下 Java 9 模块:
module com.example.a {
exports com.example.a;
}
使用导出类型:
public class Api {
public static void foo(ImplDetail args) {}
}
和非导出类型:
package com.example.b.internal;
public class ImplDetail {}
导出类型使用非导出类型作为公共方法中的方法参数类型。我假设编译器会拒绝这种不一致的类配置,因为其他模块中的客户端无法真正调用该foo()
方法,因为它们无法实例化参数类型。
令我惊讶的是,这个模块被 javac 编译成功。我可以看到 pass 的特殊情况null
,但我仍然认为这样的 API 定义格式错误,并认为它不应该被支持,理想情况下由编译器强制执行。
不允许这种情况的原因是什么?