[英]Java - How to invoke a method from another class, with the class name and method name as a string
[英]How to invoke methods of a class (in java) when class name and method name are stored in two different strings
好吧,不確定這個問題聽起來是否有點怪異,但讓我嘗試說明一下:
我有一個JSP頁面。 在此JSP頁面上,我要在項目下的一個包中定義一個Java類。 此類連接到數據庫並訪問具有字段的表,即功能名稱,功能類別。 現在,我可以在JSP中檢索兩個字符串,可以說-
String funName = "ComFunctions";
String className = "funLog");
現在,我想使用該類名來調用該函數,即基本上類似於-className.funName
Java可能嗎? 實際上,這些函數和類名將在for循環中檢索,因此我不能直接使用真實的類名進行調用,而必須使用字符串。
請提出是否有解決方法或問題,或者問題尚不清楚。
到目前為止,我嘗試了以下方法,但沒有成功-
Class c = Class.forName(className);
Object o = c.newInstance();
Method m = c.getMethod(funName, String.class); // Not sure what is supposed to be second parameter here i.e. after funName
錯誤-上面的代碼給出“找不到類錯誤”。 而且我確保該類在包裝下。 甚至添加軟件包名稱(即packge.classname)也無濟於事,它對軟件包名稱說“找不到符號”。
有指針嗎?
我嘗試調用的示例類-
package mypackage;
public class ComFunctions extends WDriverInitialize{
public static void main(String[] args){
}
public static void funLog(String username){
System.out.println(userName);
}
}
您需要確保已編譯的類在webapp的類路徑中(即WEB-INF / classes),並使用FQN(即,添加程序包名稱)。 您還可以創建類的JAR文件,然后將其添加到WEB-INF / lib文件夾中。
另外,getMethod中的額外參數是獲取具有匹配參數的方法(即,在您的示例中,采用String的方法)。
您錯過了一個難題,那就是方法參數。 沒有它,您將無法真正確定funName
指的是什么方法,以及傳遞給它的參數。
當然,該類必須位於類路徑中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.