我需要在不知道事先知道的情況下調用一個方法,參數的數量是多少。
我試過使用成員Method.invoke(Object,Object ...)作爲第二個參數傳遞一個包含我的參數的對象數組,但是這並沒有真正的工作。
有沒有辦法做我以後的事情?調用方法接受帶參數的多個參數array
回答
您描述它的方式是正確的方法。但是,您的參數數組必須具有與目標方法具有相同數量的參數;他們必須以正確的順序列出並具有適當的類型。你能發佈你得到的異常堆棧跟蹤和代碼示例嗎?
我有一個錯誤的參數調用,導致整個事情失敗,但追溯到通話很難。 謝謝:) – em70 2009-07-09 17:15:02
一旦你有Method
對象,你可以使用getParameterTypes()來確定這一點。根據JavaDoc:
返回類對象數組 表示由本方法對象所表示方法 的形參類型 在聲明順序。 如果 底層方法不帶參數,則返回長度爲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或更高版本。
你甚至可以傳遞一個數組到上面的方法: Point [] p = {new Point(1,2),new Point(3,4),new Point(5,6)}; ploygonFrom(P); – Thushan 2009-07-09 20:40:21
- 1. 帶const參數的方法不接受非const參數?
- 2. .get()回調接受多個參數
- 3. 接受幾個參數的POST方法
- 4. 接受n個參數的方法C#
- 5. Python:接受多個參數
- 6. 單一方法接受3個參數或4個參數
- 7. 同步接受一個Action參數的調用方法
- 8. 帶有多個參數的JNI方法?
- 9. 帶多個參數包的C++方法
- 10. 帶參數的多個方法java
- 11. 轉換方法調用與函數的參數不帶參數
- 12. 使用optparse接受參數的大多數pythonic方法
- 13. 調用帶參數的方法
- 14. 如何調用帶參數的方法?
- 15. 帶參數的PHP SOAP調用方法
- 16. 帶參數的調用方法java
- 17. c# - 帶參數的調用方法
- 18. 帶參數的調用方法
- 19. 帶參數的JSTL方法調用
- 20. JSF - 帶參數的調用方法(tomcat6)
- 21. 帶參數的調用方法
- 22. 不能調用多個方法參數
- 23. 使用「T」與「Object」作爲方法參數來接受參數?
- 24. 接受Class參數的測試方法
- 25. 接受Java中的方法參數
- 26. 在C#中接受多個可選參數ASP.NET的DropDownList方法
- 27. 接受多個謂詞作爲方法的參數
- 28. 延遲後調用方法(帶參數)
- 29. DebuggerDisplayAttribute方法調用帶參數
- 30. 如何不帶參數調用方法?
Varargs可能允許你這樣做,但你需要改變你的方法聲明。 http://softwareas.com/reflecting-on-varargs – seth 2009-07-09 17:19:03