モジュール 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のインスタンスの作成に使用されるJShell.Builderのファクトリ・メソッド。 JShell.builder().build()JShellのデフォルト・インスタンスを作成します。 その他の構築オプションについては、JShell.Builderを参照してください。
      戻り値:
      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インスタンスがクローズされている場合。
      関連項目:
    • 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順)。
    • variables

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

      public String varValue(VarSnippet snippet) throws IllegalStateException
      変数の現在の値を取得します。
      パラメータ:
      snippet - 値が問い合せられる変数Snippet。
      戻り値:
      スニペットによって参照される変数の現在の値。
      例外:
      IllegalStateException - このJShellインスタンスがクローズされている場合。
      IllegalArgumentException - スニペットがこのJShellインスタンスに関連付けられていない場合。
      IllegalArgumentException - 変数のステータスが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インスタンスの終了時にコールされるコールバックを登録します。 これは、クライアント・プロセスが(e.g. calledSystem.exit(0))を終了したか、close()のように接続がシャットダウンされたために発生します。 コールごとに、新しいサブスクリプションが追加されます。
      パラメータ:
      listener - 状態が終了したときに実行するアクション。
      戻り値:
      このサブスクリプションをunsubscribeするために使用できるトークン。
      例外:
      IllegalStateException - このJShellインスタンスが閉じられている場合
    • unsubscribe

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