3

私はJAVAコンソールアプリケーションを書いています。ユーザーが jar を起動すると、コマンドを入力できる Linux シェルのようなコマンドラインが表示されます。これは私が以前にプログラムしたことがないものです。通常、GUI を作成するか、解析されるいくつかの引数で jar を開始します。

基本的に私は2つの質問があります:

  1. コマンドラインからユーザー入力を読み取り、コマンドを解析してプロンプトを生成するのに役立つサードパーティライブラリはありますか? メイン クラスで渡された引数を解析するには、通常 Apache Commons CLI で使用します。ここもフルに使うか、もっといい方法はないか。
  2. 「無限の入力」を提供するためのベストプラクティスはありますか? 私が見つけたすべてのソリューションは、次のように 10 年以上前のものです。

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(true){
        System.out.print("Enter String");
        String s = br.readLine();
    }
    

    これはまだベストプラクティスですか、それともより良い方法がありますか?

4

2 に答える 2

1

また、コマンド ラインのようなインターフェイスを備えたアプリケーションを作成中です。私が設計した方法は、すべてのコマンドのスーパークラスである「コマンド」と呼ばれる 1 つのクラスを作成することでした。「execute」と「getName()」の2つの抽象メソッドを作成します。

次に、各コマンドの子クラスで getName() メソッドをオーバーライドして、ユーザーが入力するコマンドを文字列として返すようにします。(getName() を使用する必要はありません。他のメソッド名でも機能します。toString() をオーバーライドすることもできますが、子クラスに独自の実装を強制しないため、これは理想的ではありません)

「execute」と呼ばれる別のメソッドに、残りのコマンド エントリ (パラメーター) と各コマンドのロジックを取得させます。

ユーザー入力を取得すると、コードの大文字と小文字を切り替えるセクションを大量に使用する代わりに、すべてのコマンドのリストを反復処理することで、それを command.getName() メソッドと照合することができます。そうしないと醜くなります。

FWIW、アプリケーションの他の部分から簡単にアクセスできるように、コンソールクラスをシングルトンとして持っています。

于 2016-03-12T01:22:41.043 に答える