- 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
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static class
JShell.Builder
JShell
インスタンスのビルダー。class
JShell.Subscription
サブスクリプションとは、サブスクリプションを参照するためのトークンであり、unsubscribedとすることができます。
-
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 void
addToClasspath(String path)
指定されたパスは、eval()で使用されるクラスパスの末尾に追加されます。static JShell.Builder
builder()
JShell.Builder
のファクトリ・メソッドで、JShell
のインスタンスを作成するために使用されます。void
close()
この状態エンジンを閉じます。static JShell
create()
新しいJShell状態エンジンを作成します。Stream<Diag>
diagnostics(Snippet snippet)
スニペットの最新評価の診断を返します。List<SnippetEvent>
drop(Snippet snippet)
ステートから宣言を削除します。List<SnippetEvent>
eval(String input)
該当する場合、定義および/または実行を含む入力文字列を評価します。Stream<ImportSnippet>
imports()
アクティブなインポート・スニペットを返します。Stream<MethodSnippet>
methods()
アクティブなメソッド・スニペットを返します。JShell.Subscription
onShutdown(Consumer<JShell> listener)
このJShellインスタンスが終了するときに呼び出されるコールバックを登録します。JShell.Subscription
onSnippetEvent(Consumer<SnippetEvent> listener)
スニペットのステータスが変更されたときに呼び出されるコールバックを登録します。Stream<Snippet>
snippets()
すべてのスニペットを返します。SourceCodeAnalysis
sourceCodeAnalysis()
ソース・コード分析機能へのアクセス。Snippet.Status
status(Snippet snippet)
スニペットのステータスを返します。void
stop()
現在実行中の評価を停止しようとします。Stream<TypeDeclSnippet>
types()
アクティブな型宣言(クラス、インタフェース、注釈型、および列挙型) snippetsを返します。Stream<String>
unresolvedDependencies(DeclarationSnippet snippet)
RECOVERABLE_DEFINED
またはRECOVERABLE_NOT_DEFINED
宣言の場合、スニペットの現在の未解決の依存関係の名前。void
unsubscribe(JShell.Subscription token)
コールバック・サブスクリプションを取消します。Stream<VarSnippet>
variables()
アクティブな変数スニペットを返します。String
varValue(VarSnippet snippet)
変数の現在の値を取得します。
-
-
-
メソッドの詳細
-
create
public static JShell create() throws IllegalStateException
- 戻り値:
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評価状態を更新します。 すべてのアクティブ・スニペットについて、statusをDROPPED
に変更します。- パラメータ:
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
-
variables
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
- サブスクリプションに対応するトークンは、サブスクライブ解除されます。
-
-