我有一個通用字符串存儲在變量String func = "validate";
,我想調用該名稱的函數即我需要調用validate()
函數。
我的意思是說我將變量傳遞給一些功能
public void callFunc(String func){
....
}
所以,上面的函數應該調用作爲參數的callfunc()
傳遞函數名稱相應的功能。Java:如何調用其名稱存儲在字符串變量中的函數
回答
你可以使用反射來做到這一點,例如,
Method method = getClass().getMethod(func);
// TODO: Validation
method.invoke(this);
這是假設你想打電話this
的方法,當然,它是一個實例方法。查看Class.getMethod
和相關方法,以及Method
本身,瞭解更多詳情。您可能需要getDeclaredMethod
,而您可能需要使其可訪問。
我會看看你是否可以想到一種避免這種可能的方法,儘管如此 - 反射會很快變得雜亂。值得退一步考慮這是否是最好的設計。如果您向我們提供更多詳細信息,我們可能會提出替代方案。
感謝很多.. :) –
如果我想將參數傳遞給函數'func(val1,val2)' –
@ShamsUdDin,那麼你使用'invoke(this,val1,val2)'。閱讀我鏈接到的文檔。 –
還有另一種方法比使用反射。你可以寫出如下模式匹配:
switch (func) {
case "validate": validate(); break;
case "apply": apply(); break;
default: break;
}
但我同意喬恩:儘量避免這種情況。如果您使用模式匹配,則必須應用更改兩次。例如,如果您添加其他方法,則需要將其添加到函數命名方法和模式匹配中。
如果我們使用開關功能,那麼我們的代碼將不會變爲泛型,我的意思是說假設我創建了一個名爲'mypage()'的新函數,然後我需要添加我的案例在切換功能。 –
這正是我在底部所說的。 –
- 1. 調用存儲在字符串變量中的函數名稱?
- 2. 如何調用名稱存儲在變量中的函數?
- 3. 如何在CMake中調用其名稱存儲在變量中的函數
- 4. 當函數名存儲在字符串變量中時如何調用對象的Java函數?
- 5. 如何調用名稱存儲在字符串中的方法?
- 6. 如何在Python中使用存儲爲字符串的變量調用函數
- 7. 字符串中的Java變量名稱
- 8. 如何調用存儲在字符串變量中的函數? [PHP]
- 9. 數組到字符串轉換 - 變量函數名稱調用
- 10. LUA:使用其名稱(字符串)在類中調用函數
- 11. 在java中調用基於字符串名稱的函數
- 12. 如何調用名稱在字符串中定義的函數?
- 13. 是否可以調用名稱存儲在vbscript中的字符串的函數?
- 14. 如何通過存儲在字符串中的名稱訪問變量?
- 15. 如何將變量中存儲的函數的結果存儲爲字符串?
- 16. 如何在其他Java類中將變量存儲在字符串中?
- 17. 變量表名稱MySQL存儲函數
- 18. Java:我如何將變量的名稱放入字符串中?
- 19. 將字符串數組的值存儲在變量中的java
- 20. 使用Clojure中函數名稱的字符串調用函數
- 21. 如何通過名稱存儲在字符串變量中獲取XAML元素?
- 22. 將一些函數應用於其字符串名稱中的變量
- 23. 如何從字符串變量名稱?
- 24. 在函數中存儲字符串的打印變量 - Python
- 25. C#:執行存儲在字符串變量中的函數
- 26. 字符串變量名稱
- 27. 獲取存儲在變量中的字符串的值,其名稱作爲字符串存儲在另一個變量中
- 28. Lua使用其名稱調用函數(字符串)
- 29. 訪問變量值,其中變量的名稱存儲在一個字符串中的R
- 30. C#如何使用其名稱的字符串調用不同的函數?
使用反射:) –
一個常見的示例是使用Class.forName()加載相應的JDBC驅動程序:http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17 – paulsm4