2012-01-26 10 views
0

私はプログラムを作成しました。使用するメソッドを要求する必要があります(私はjava.lang.StringBuffer.appendを使用します)。これは3の場合です。ユーザーはすべての文字列を必要とするだけ多くの引数を入力することができ、プログラムは文字列を追加して出力します。しかし、何か間違っていると私はエラーを見つけることはありません。メソッドを追加して使用するJavaリフレクションを追加して使用する

import java.lang.reflect.*; 

import tio.*; 
public class MethodExecutor { 
    public static void main(String [] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException 
    { 
     String input = ""; 
     String input1 = ""; 
     String input2 = ""; 
     String argumenten[]; 
     int aantal = 0; 
     System.out.println("What method to invoke?"); 
     input = Console.in.readLine(); 

     input1 = input.substring(0,input.lastIndexOf(".")); 
     input2 = input.substring(input.lastIndexOf(".")+1,input.length()); 
     System.out.println(input2); 

     Class<?> c = Class.forName(input1); 
     Method m = c.getMethod(input2, null); 
     Class<?>[] parameterTypes = m.getParameterTypes(); 

     System.out.println("Needs max " + parameterTypes.length + " parameters."); 
     System.out.println("How many will you provide?"); 
     aantal = Console.in.readInt(); 
     argumenten = new String[aantal]; 
     for(int i = 0; i < argumenten.length; i++) 
      argumenten[i] = Console.in.readLine(); 

     System.out.println("Success"); 

     } 
} 

Tioは、コンソール入力を取得するための単なるlibです。

誰かが助けてくれますか?

敬具、

+0

何が間違っていますか、何が何振るか、何を期待していますか? – pgras

+0

.appendに必要な最大限のパラメータを表示できません。だから私はまた、ユーザーによって与えられたパラメータで関数を実行することはできません。私は.getmethodが私に正しい関数を与えないと思う。 – user1007522

答えて

2

私はこのことを考えて...

Method m = c.getMethod(input2, null); 

は...引数を取りませんINPUT2に保存された名前のメソッド、を探すために起こっています。

代わりに、私はあなたがクラス上のすべての方法を検索する必要があり、その後、getMethodさんのjavadocから名前

を(一致したものの長さをプリントアウトすると思う:)

は、メソッドを返します。このClassオブジェクトが表すクラスまたはインタフェースの指定されたpublicメンバメソッドを反映するオブジェクトnameパラメータは、目的のメソッドの単純な名前を指定するStringです。 parameterTypesパラメータは、メソッドの仮パラメータ型を宣言された順序で識別するClassオブジェクトの配列です。 parameterTypesがnullの場合、空の配列であるかのように扱われます。

+0

だから私はgetdeclaredmethodsですべてを検索しなければならず、もしテストすれば、appendというメソッドがあるかどうかテストする必要があるだろうか? – user1007522

関連する問題