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

クラスJShell

java.lang.Object
jdk.jshell.JShell
すべての実装されたインタフェース:
AutoCloseable

public class JShell
extends Object
implements AutoCloseable
JShell評価状態エンジン。 これは、JShell APIの中心的なクラスです。 JShellインスタンスは、進化するコンパイルと実行状態を保持します。 状態は、インスタンス・メソッドeval(String)drop(Snippet)、およびaddToClasspath(String)を使用して変更されます。 メソッドの大半は状態を問合せします。 JShellインスタンスは、onSnippetEvent(Consumer)onShutdown(Consumer)でイベントを登録することもできます。unsubscribe(Subscription)で登録解除されています。 ソース分析ユーティリティへのアクセスは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.Builderのファクトリ・メソッドで、JShellのインスタンスを作成するために使用されます。 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つのスニペット、つまり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
      ステートから宣言を削除します。 つまり、スニペットがactive persistentスニペットである場合、スニペットを削除し、それに応じて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順に並べ替えます。
    • 変数

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

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

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

      public Stream<ImportSnippet> imports()
      アクティブなインポート・スニペットを返します。 この便利なメソッドは、snippets()status(snippet).isActive() && snippet.kind() == Kind.IMPORTのためにフィルタリングされ、ImportSnippetにキャストされるのと同じです。
      戻り値:
      アクティブな宣言宣言を宣言します。
    • 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インスタンスに関連付けられていない場合。
    • varValue

      public String varValue​(VarSnippet snippet) throws IllegalStateException
      変数の現在の値を取得します。
      パラメータ:
      snippet - 値が問合せされる変数Snippet。
      戻り値:
      スニペットによって参照される変数の現在の値。
      例外:
      IllegalStateException - このJShellインスタンスが閉じられている場合。
      IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      IllegalArgumentException - 変数statusがSnippet.Status.VALID以外の場合。
    • onSnippetEvent

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

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

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