モジュール jdk.jshell
パッケージ jdk.jshell

クラスJShell

  • すべての実装されたインタフェース:
    AutoCloseable

    public class JShell
    extends Object
    implements AutoCloseable
    JShell評価状態エンジン。 これは、JShell APIの中央クラスです。 JShellインスタンスは、進化するコンパイルおよび実行状態を保持します。 状態は、インスタンス・メソッドeval(String)drop(Snippet)およびaddToClasspath(String)によって変更されます。 ほとんどのメソッドは状態を問い合せます。 JShellインスタンスでは、unsubscribe(Subscription)に登録されていないonSnippetEvent(Consumer)およびonShutdown(Consumer)にイベントを登録することもできます。 ソース分析ユーティリティにアクセスするには、sourceCodeAnalysis()を使用します。 完了したら、インスタンスを閉じてリソースを解放する必要があります(close())。

    JShellのインスタンスは、JShell.create()を使用して作成されます。

    このクラスはスレッド・セーフではありません。ただし、記載されているように、すべてのアクセスは1つのスレッドを介して行われる必要があります。

    導入されたバージョン:
    9
    • メソッドの詳細

      • create

        public static JShell create()
                             throws IllegalStateException
        新しいJShell状態エンジンを作成します。 つまり、JShellのインスタンスを作成します。

        JShell.builder().build()と同等です。

        戻り値:
        JShellのインスタンス。
        例外:
        IllegalStateException - JShellインスタンスを作成できなかった場合。
      • builder

        public static JShell.Builder builder()
        JShellのインスタンスの作成に使用されるJShell.Builderのファクトリ・メソッド。 JShell.builder().build()を使用して、JShellのデフォルト・インスタンスを作成します。 構成オプションの詳細は、JShell.Builderを参照してください。
        戻り値:
        Builderのインスタンス。
        関連項目:
        JShell.Builder
      • sourceCodeAnalysis

        public SourceCodeAnalysis sourceCodeAnalysis()
        ソース・コード分析機能へのアクセス。 JShellのインスタンスは、常にsourceCodeAnalysis()から同じSourceCodeAnalysisインスタンスを返します。
        戻り値:
        SourceCodeAnalysisのインスタンス。これは、完了検出や完了の提案などのソース分析に使用できます。
      • eval

        public List<SnippetEvent> eval​(String input)
                                throws IllegalStateException
        必要に応じて、定義や実行などの入力文字列を評価します。 (一部のunresolvedDependencies参照と同様に)エラーを遅延できる場合を除き、入力にエラーがないかどうかがチェックされます。エラーは評価を中止します。

        入力は、ソース・コードの完全なスニペット(1つの式、文、変数宣言、メソッド宣言、クラス宣言またはインポート)です。 任意の入力を個々の完全なスニペットに分割するには、SourceCodeAnalysis.analyzeCompletion(String)を使用します。

        インポートの場合、インポートが追加されます。 クラス、インタフェース、メソッドおよび変数が定義されます。 変数、文および式のイニシャライザが実行されます。 public、protected、private、staticおよびfinal修飾子は、opレベルの宣言では許可されず、警告付きで無視されます。 同期メソッド、ネイティブ・メソッド、抽象メソッドおよびデフォルトの最上位メソッドは許可されず、エラーになります。 宣言の以前の定義が上書きされると、そのステータスがOVERWRITTENに変更されたイベントが発生し、削除、拒否またはすでに上書きされた宣言では発生しません。

        デフォルトの場合と同様に、実行環境がプロセス外の場合、評価されたコードによって実行環境が終了すると、このJShellインスタンスはクローズされますが、コール元のプロセスとVMは有効なままです。

        パラメータ:
        input - 評価する入力文字列
        戻り値:
        この評価によって直接的または間接的に発生したイベントのリスト。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
        関連項目:
        SourceCodeAnalysis.analyzeCompletion(String), onShutdown(java.util.function.Consumer)
      • drop

        public List<SnippetEvent> drop​(Snippet snippet)
                                throws IllegalStateException
        状態から宣言を削除します。 つまり、スニペットがアクティブな永続スニペットの場合は、スニペットを削除し、それに応じてJShell評価状態を更新します。 すべてのアクティブなスニペットについて、statusDROPPEDに変更します。
        パラメータ:
        snippet - 削除するスニペット
        戻り値:
        削除されたスニペットに依存する宣言を更新したイベントのリスト。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
        IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      • addToClasspath

        public void addToClasspath​(String path)
        指定されたパスは、eval()で使用されるクラスパスの末尾に追加されます。 名前のないパッケージには、eval(String)コードが配置されているパッケージからアクセスできないことに注意してください。
        パラメータ:
        path - クラスパスに追加するパス。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
      • stop

        public void stop()
        現在実行中の評価を停止しようとしました。 eval(java.lang.String)メソッドの実行中にコールされ、ユーザーのコードが実行されると、ユーザーのコードを停止しようとする試みが行われます。 通常、このメソッドは、evalメソッドを実行しているスレッドとは異なるスレッドからコールする必要があることに注意してください。

        eval(java.lang.String)メソッドが実行されていない場合、何も実行されません。

        ユーザーのコードを停止しようとすると、場合によっては失敗することがあります。これには、I/O操作で実行がブロックされた場合や、ユーザーのコードがThreadDeath例外を捕捉している場合が含まれます。

      • close

        public void close()
        この状態エンジンを閉じます。 リソースを解放します。 この状態エンジンが不要になったときに呼び出されます。
        定義:
        close、インタフェースAutoCloseable
      • snippets

        public Stream<Snippet> snippets()
        すべてのスニペットを返します。
        戻り値:
        現在のすべてのスニペットのスニペットをID順に指定します。
      • variables

        public Stream<VarSnippet> variables()
        アクティブな変数スニペットを返します。 この便利なメソッドは、status(snippet).isActive() && snippet.kind() == Kind.VARIABLEでフィルタ処理され、VarSnippetにキャストされるsnippets()と同等です。
        戻り値:
        アクティブな宣言された変数。
      • methods

        public Stream<MethodSnippet> methods()
        アクティブなメソッド・スニペットを返します。 この便利なメソッドは、status(snippet).isActive() && snippet.kind() == Kind.METHODでフィルタ処理され、MethodSnippetにキャストされるsnippets()と同等です。
        戻り値:
        アクティブな宣言されたメソッド。
      • types

        public Stream<TypeDeclSnippet> types()
        アクティブな型宣言(クラス、インタフェース、注釈型および列挙型)スニペットを返します。 この便利なメソッドは、status(snippet).isActive() && snippet.kind() == Kind.TYPE_DECLでフィルタ処理され、TypeDeclSnippetにキャストされるsnippets()と同等です。
        戻り値:
        アクティブな宣言型宣言。
      • imports

        public Stream<ImportSnippet> imports()
        アクティブなインポート・スニペットを返します。 この便利なメソッドは、status(snippet).isActive() && snippet.kind() == Kind.IMPORTでフィルタ処理され、ImportSnippetにキャストされるsnippets()と同等です。
        戻り値:
        アクティブな宣言されたインポート宣言。
      • status

        public Snippet.Status status​(Snippet snippet)
        スニペットのステータスを返します。 これは、明示的なeval()コールまたは依存関係によってトリガーされた自動更新のいずれかによって更新されます。
        パラメータ:
        snippet - 検索するSnippet
        戻り値:
        このスニペットに対応するステータス
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
        IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      • diagnostics

        public Stream<Diag> diagnostics​(Snippet snippet)
        スニペットの最新の評価の診断を返します。 この評価は、明示的なeval()コールまたは依存関係によってトリガーされた自動更新のいずれかが原因で行われます。
        パラメータ:
        snippet - 検索するSnippet
        戻り値:
        このスニペットに対応する診断。 これには、unresolvedDependencies()でレポートされるunresolvedDependencies参照は含まれません。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
        IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      • unresolvedDependencies

        public Stream<String> unresolvedDependencies​(DeclarationSnippet snippet)
        RECOVERABLE_DEFINEDまたはRECOVERABLE_NOT_DEFINED宣言の場合、スニペットの現在の未解決の依存関係の名前。 このメソッドの戻り値は、別のスニペットのeval()またはdrop()によって依存性が更新されると、特定のメソッドで変更される可能性があります。
        パラメータ:
        snippet - 検索する宣言Snippet
        戻り値:
        現在unresolvedDependenciesであるシンボル名のストリーム。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
        IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      • onSnippetEvent

        public JShell.Subscription onSnippetEvent​(Consumer<SnippetEvent> listener)
                                           throws IllegalStateException
        スニペットのステータスが変更されたときに呼び出されるコールバックを登録します。 コールごとに新しいサブスクリプションが追加されます。
        パラメータ:
        listener - ステータスが変更されたときに実行するアクション。
        戻り値:
        このサブスクリプションをサブスクライブ解除するために使用できるトークン。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合。
      • onShutdown

        public JShell.Subscription onShutdown​(Consumer<JShell> listener)
                                       throws IllegalStateException
        このJShellインスタンスの終了時にコールされるコールバックを登録します。 これは、クライアント・プロセスが終了した(たとえば、System.exit(0))か、close()のように接続がシャットダウンされたために発生します。 コールごとに新しいサブスクリプションが追加されます。
        パラメータ:
        listener - 状態が終了したときに実行するアクション。
        戻り値:
        このサブスクリプションをサブスクライブ解除するために使用できるトークン。
        例外:
        IllegalStateException - このJShellインスタンスがクローズされている場合
      • unsubscribe

        public void unsubscribe​(JShell.Subscription token)
        コールバック・サブスクリプションを取り消します。
        パラメータ:
        token - サブスクライブ解除するサブスクリプションに対応するトークン。