为什么泄漏内部类型的公共 API 编译不会失败?
我有一个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成功编译的。我可以看到传递的特殊情况,我仍然认为这样的API定义格式不正确,并认为它不应该被支持,理想情况下由编译器强制执行。null
不允许这种情况的理由是什么?