よるとhttps://www.oracle.com/corporate/features/understanding-java-9-modules.html、Javaのモジュールシステムは、次のディレクティブが導入されています。
- 輸出、輸出に...
- 用途
- 提供しています...と
- オープン、開く、開く...に
各ディレクティブは、リフレクションを使用して内部のメンバーにアクセスする外部モジュールにどのような(もしあれば)影響がありますか?
例えば、ないexports <package>
外部モジュールは、すべてにアクセスできるようにするpublic
、protected
、private
エクスポートしたパッケージのメンバーは、リフレクションを使用して?どのような他のディレクティブについてはどうですか?
私は単に引用でしょう#のJLS7.7を(私がフォーマットされ、分類)ここに:
実行時に、コンパイル時とアクセス時のアクセスとは異なる、のJava SEプラットフォームは、コアリフレクションAPIを介して反射型のアクセスを提供する(§1.4) 。
もっとあなたの質問ノーマルモジュールとして分類(へのmodule foo
()とオープンモジュールopen module bar
):
通常のモジュール
通常のモジュールは、反射付与明示的にエクスポートまたは明示的に開放されるパッケージのみにタイプへのアクセスを(または両方)。
モジュールのエクスポートされたパッケージ(
exports com.example.foo.bar
)以下のために通常モジュール外部コード、モジュールのエクスポート(および開かれていない)パッケージ内の型に付与された反射アクセスは、具体的にある
public
とprotected
TY P ESこれらのパッケージであり、public
およびprotected
メンバーそれらのタイプの。モジュールの開いたパッケージ(
opens com.example.foo.internal to com.example.bar
)(エクスポートされたかどうか)、モジュールの開かれたパッケージ内の型に付与された反射のアクセスがにあるそれらのパッケージ内のすべての種類、およびそれらの型のすべてのメンバー。
反射アクセスは、エクスポートまたは開かれていないパッケージ内の型、またはそのメンバーに付与されません。
モジュール内
コードモジュール内では、すべてのタイプ、およびへの反射のアクセス楽しんモジュール内のすべてのパッケージには、すべてのメンバーを。
オープンモジュール
オープンモジュールには、反射のアクセス許可するすべてのパッケージが開かれていたかのように、すべてのパッケージで型にします。
モジュールの開いたパッケージ
コードのために開いたモジュールの外、モジュールの開かれたパッケージ(で、モジュール内のすべてのパッケージ)内の型に付与された反射のアクセスがあるそれらのパッケージ内のすべての種類、およびそれらの型のすべてのメンバーに。
モジュール内
コードモジュール内には、反射アクセス楽しんモジュール内のすべてのパッケージには、すべてのタイプ、およびすべてのメンバーにします。