2009-07-09 178 views
2

我需要在不知道事先知道的情況下調用一個方法,參數的數量是多少。
我試過使用成員Method.invoke(Object,Object ...)作爲第二個參數傳遞一個包含我的參數的對象數組,但是這並沒有真正的工作。
有沒有辦法做我以後的事情?調用方法接受帶參數的多個參數array

+0

Varargs可能允許你這樣做,但你需要改變你的方法聲明。 http://softwareas.com/reflecting-on-varargs – seth 2009-07-09 17:19:03

回答

2

您描述它的方式是正確的方法。但是,您的參數數組必須具有與目標方法具有相同數量的參數;他們必須以正確的順序列出並具有適當的類型。你能發佈你得到的異常堆棧跟蹤和代碼示例嗎?

+0

我有一個錯誤的參數調用,導致整個事情失敗,但追溯到通話很難。 謝謝:) – em70 2009-07-09 17:15:02

0

一旦你有Method對象,你可以使用getParameterTypes()來確定這一點。根據JavaDoc:

返回類對象數組 表示由本方法對象所表示方法 的形參類型 在聲明順序。 如果 底層方法不帶參數,則返回長度爲0的數組。

0

Varargs就是這樣。 檢查docs

可以使用可變參數,當你不知道有多少特定類型的參數將被傳遞給方法。這是手動創建陣列的捷徑。
要使用可變參數,可以使用省略號(三點,...),空格和參數名稱來跟蹤最後一個參數的類型。然後可以用該參數的任意數量調用該方法,包括無。

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

你甚至可以傳遞一個數組到上面的方法: Point [] p = {new Point(1,2),new Point(3,4),new Point(5,6)}; ploygonFrom(P); – Thushan 2009-07-09 20:40:21