Java 9のJShellで/listコマンドを使いこなす方法:各種リスト表示コマンドの徹底解説
JShellとは?
JShellはJava 9で導入されたコマンドラインツールであり、main()メソッドを用意することなく、単純なステートメントや式、メソッド、クラスなどを手軽に入力して実行できるREPL(Read-Eval-Print Loop)環境です。Javaのコード断片を対話形式で試せるため、学習やプロトタイピングに非常に便利です。
JShellに入力されたコードには、それぞれ一意のIDが割り当てられます。このIDは1から始まり、JShellに入力されるコマンドごとに増加していきます。起動時に読み込まれるライブラリについても同様で、インポートごとに一意のIDが付与され、$1から始まり、読み込まれるコードごとに$2、$3と増加していきます。
セッション中に入力・読み込みされたすべてのコードを一覧表示したい場合は、内部コマンドである「/list」を使用します。
/listコマンドの種類と使い方
/list /list [ID] /list [コード名] /list -start /list -all
- /list: 現在のセッションで入力されたアクティブなコードをすべて表示します(JShell起動時に読み込まれたコードは除きます)。
- /list [ID]: 指定したIDに対応するソースコードを表示します。
- /list [コード名]: 指定した名前に対応するソースコードを表示します。
- /list -start: JShellの起動時に読み込まれたすべてのコードを表示します。セッション開始時には、デフォルトでプリロードされたすべてのインポートが表示され、さらにユーザー自身が事前読み込みとして設定したコードも表示されます。
- /list -all: JShellセッション中に入力された、アクティブなコード、非アクティブなコード、エラーが発生したコード、プリロードされたコードをすべて一覧表示します。
/list -allですべてのコードを確認する
以下のコード例では、「/list -all」コマンドを使用して、セッション中に入力されたすべてのインポート文や式などを一覧表示しています。
jshell> /imports
| import java.io.*
| import java.math.*
| import java.net.*
| import java.nio.file.*
| import java.util.*
| import java.util.concurrent.*
| import java.util.function.*
| import java.util.prefs.*
| import java.util.regex.*
| import java.util.stream.*
jshell> LocalDate localDate = LocalDate.of(2020, 04, 10)
| Error:
| cannot find symbol
| symbol: class LocalDate
| LocalDate localDate = LocalDate.of(2020, 04, 10);
| ^-------^
| Error:
| cannot find symbol
| symbol: variable LocalDate
| LocalDate localDate = LocalDate.of(2020, 04, 10);
| ^-------^
jshell> int x = 10
x ==> 10
jshell> public enum Operate {
...> ADDITION,
...> DIVISION;
...> }
| created enum Operate
jshell> /list -all
s1 : import java.io.*;
s2 : import java.math.*;
s3 : import java.net.*;
s4 : import java.nio.file.*;
s5 : import java.util.*;
s6 : import java.util.concurrent.*;
s7 : import java.util.function.*;
s8 : import java.util.prefs.*;
s9 : import java.util.regex.*;
s10 : import java.util.stream.*;
e1 : LocalDate localDate = LocalDate.of(2020, 04, 10);
1 : int x = 10;
2 : public enum Operate {
ADDITION,
DIVISION;
}出力結果を見ると、先頭の「s」は起動時に読み込まれたスタートアップコード、「e」はエラーが発生したコード、数字はセッション中に入力されたアクティブなコードを表していることがわかります。これにより、どのコードが有効で、どのコードが失敗したのかを一目で把握できます。
同じ名前を持つ変数・メソッドの一覧を表示する
次のコード例では、変数、メソッド、さらには型に対して同じ名前を付けています。その後、「/list」コマンドに名前を指定することで、その名前に関連するすべてのコードを対応する型情報とともに表示できます。
jshell> int x = 10
x ==> 10
jshell> public int x(int y) {
...> return y;
...> }
| created method x(int)
jshell> public long x(long y, long z) {
...> return y + z;
...> }
| created method x(long,long)
jshell> /list x
1 : int x = 10;
2 : public int x(int y) {
return y;
}
3 : public long x(long y, long z) {
return y + z;
}このように、/listコマンドにIDや名前を指定することで、必要なコードだけをピンポイントで確認できるため、長いセッションでも効率的に作業履歴を管理できます。
-
JavaのJRadioButtonMenuItemとは?メニュー項目の作成方法とサンプルコードを解説
JRadioButtonMenuItemは、Java SwingのJMenuItemクラスを継承したサブクラスです。同じグループに属する複数のメニュー項目の中から1つだけを選択できるラジオボタン形式のメニュー項目で、選択された項目にはその選択状態が表示されます。 複数のJRadioButtonMenuItemをButtonGroupオブジェクトに追加することでボタングループを形成できます。グループ内のいずれかの項目が選択されると、その他のすべてのラジオボタンメニュー項目は自動的に選択解除されます。この仕組みにより、設定画面などで「排他的な選択」を簡単に実現できます。 構文 public cla
-
【Java】JComboBoxの各項目にさまざまなフォントを表示する方法
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドとドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーはこのリストから任意の値を選択できます。また、コンボボックスに対するユーザーの操作に応じて、ActionListener、ChangeListener、ItemListenerなどのイベントを受け取ることも可能です。 JComboBoxの各項目にそれぞれ異なるフォントスタイルを表示したい場合は、ListCellRendererインターフェースを実装したカスタムレンダラーを使用します。これにより、ドロップダウンリスト内の各項目を、その項目名