0

基本的にJavaコマンドプロンプトを作成しようとしています。ユーザーがユーザーからの入力として入力するとします。

new x java.util.ArrayList

ここで、xはオブジェクト名であり、java.util.ArrayListはクラスです。したがって、ユーザーが入力したこのスクリプトは、クラスjava.util.ArrayListのオブジェクトを作成することを意味します。

ここで、ユーザーが次のように入力するとします。

new x java.util.ArrayList int:5 

つまり、java.util.ArrayListのオブジェクトxを作成し、そのサイズを5にします。このように、オブジェクトの作成に関連するものを入力として入力するたびに、その入力に基づいてオブジェクトとそのメソッドのクラスを作成できるようにします。ユーザーはそうします。Javaとリフレクションは初めてなので、親切に助けてください!これが私の心を使ってこれまでに考えたコードです:

 public static void token_classification() throws ClassNotFoundException
    {
        my_hash = new HashMap();
        Keep_Obj_Info = new HashMap();
        if(expression_keeper[0].equalsIgnoreCase("new"))
        {
           my_hash.put("Object", expression_keeper[1]);
           Class Obj= Class.forName(expression_keeper[2]);
           Keep_Obj_Info.put("Modifier", Obj.getModifiers());
           Keep_Obj_Info.put("Package",Obj.getPackage());
                ////????


           Constructor[] constructors = Obj.getConstructors();

        }
        else
        if(expression_keeper[0].equalsIgnoreCase("call"))
        {

        }
        else
        if(expression_keeper[0].equalsIgnoreCase("print"))
        {

        }
        else
        {
           System.out.println("Invalid Script!");
        }
    }

ExpressionKeeperは基本的に、ユーザー入力をトークン化された形式で保持する文字列配列です。新しい場所への空白の隣にあるものを意味します。

4

2 に答える 2

2

Javaでオブジェクトを作成するのに適しています。コンストラクターとその引数が必要です。コマンドプロンプトからの入力を受け入れ、それらを解釈する一般的なフレームワークを持つことができます。つまり、入力のデータ型を見つけることを意味します.ex:number / string / char / booleanなど。また、フレームワークは、コンストラクタなどの引数インデックスを知っている必要があります。 2 つのパラメーターがあり、1 つは文字列で、もう 1 つは int です。最初のパラメーターが int で 2 番目のパラメーターが String であるとします。コマンド ラインからパラメーターを渡すときに、ユーザーは最初に string を渡し、次に int を渡します。あなたが世話をする必要があるそのような多くのこと....今、あなたがArrayListについて言及した例に来て、次のようにプログラムを書くことができます:(私はあなたが独自の方法で実装できる擬似コードをあなたに与えました)

{

           int howManyParametersFromCommandLine = getnoParameterCount;  //it will maintain no.of parameters passed from command line

           String[] parametersFromCommandLine  = getParametersFromcommandLine();  // Ex : {1,"ABC",new Double(80.0d)}; 

            List<Class>  parameterTypesList = parseParameters(parametersFromCommandLine); //This will identify type of each of the parameter


   Class  clazz = Class.forName("youClassName");

   Constructor[]  cons = clazz.getConstructors();

   for(Constructor c :  cons)

{ Class[] parameterTypes = c.getParameterTypes();

       if(parameterTypes.length == howManyParametersFromCommandLine)

       {
          //try to match the parameter type in parameterTypesList with parameterTypes if this matches then

           boolean typeMatchingAndSequecneSucess = matchParameters(parameterTypes,parameterTypesList);

           if(typeMatchingAndSequecneSucess)
           {
               if(c.isAccessible())
               {
                  Object[] initargs = parseAndRetActualParamValue(parametersFromCommandLine); 
                  return c.newInstance(initargs); 
               }
           }
       }

   }

}

これがあなたを助けることを願っています!!

于 2013-03-04T20:43:14.190 に答える
1

Interpreterデザインパターンを使用することもできます。そのためだけに使用されます。
これInterpreterは少し複雑ですが、コードの解釈が正しく機能することを保証します。また、新しいコマンドを簡単に組み込むことができます。
こちらをご覧ください: http://en.wikipedia.org/wiki/Interpreter_pattern
お役に立てれば幸いです。

于 2013-03-04T20:11:43.480 に答える