2009-07-09 23 views
2

引数の量は何であるかを事前に知らなくてもメソッドを呼び出す必要があります。
私の引数を含むオブジェクトの配列を2番目のパラメータとして渡すと、実際には動作しませんでしたが、Method.invoke(Object、Object ...)というメンバを使ってみました。
私は後に何をする方法がありますか?引数で複数の引数を受け入れるInvokeメソッド

+0

Varargsではこれを行うことができますが、メソッドの宣言を変更する必要があります。 http://softwareas.com/reflecting-on-varargs – seth

答えて

2

これを行う方法は正しい方法です。ただし、引数配列には、ターゲットメソッドと同じ数の引数を指定する必要があります。それらは正しい順序でリストされ、適切なタイプを持たなければなりません。あなたが取得している例外スタックトレースとコードサンプルを投稿できますか?

+0

私は間違った議論をしてコールしましたが、それはすべてが失敗する原因となりましたが、コールに戻ることは困難でした。 ありがとう:) – em70

0

Methodオブジェクトを取得したら、getParameterTypes()を使用してこれを判断できます。 JavaDocから:

このMethodオブジェクトによって表されるメソッド の宣言順に仮パラメータの型、 を表すClassオブジェクトの配列を返します。 の基本メソッドにパラメータがない場合は、長さ0の配列を返します。

0

Varargsが方法です。 チェックdocs

メソッドに渡されますどのように多くの引数の特定の種類の分からないときは、可変引数を使用します。これは、配列を手動で作成するための簡単な方法です。
varargsを使用するには、最後のパラメータのタイプに省略記号(3つのドット、...)、スペース、およびパラメータ名を続けます。このメソッドは、noneを含む任意の数のそのパラメータで呼び出すことができます。

public Polygon polygonFrom(Point... corners) { 
    int numberOfSides = corners.length; 
    double squareOfSide1, lengthOfSide1; 
    squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x) 
      + (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ; 
    lengthOfSide1 = Math.sqrt(squareOfSide1); 
    // more method body code follows that creates 
    // and returns a polygon connecting the Points 
} 

PS。 VarargsはJava 1.5以降で使用できます。

+0

上記の方法に配列を渡すことさえできます: ポイント[] p = {新しいポイント(1,2)、新しいポイント(3,4)、新しいポイント(5,6)}; ploygonFrom(p); – Thushan

関連する問題