我试图编写一个接收字符串的函数,该字符串由一个以字符串数组作为参数的静态方法组成。
例如,让我们假设我们这个类有一个静态方法:
package com.stack.examples;
public class Example {
public static void testMethod() {
System.out.println("method executed");
}
}
现在,我们的函数将在另一个类中,如下所示:
package com.stack.functions;
public class Functions {
public void parseCommand(String command) {
//TODO, this is where my doubts lie
//The given string is always composed of a sequence of Java identifiers
//separated by the character ’.’, representing the full qualified name of
//a Java method (package.class.method)
command.execute(); //Would this work? Perhaps reflection would be ideal
}
}
我的目标是解析parseCommand
中作为参数给出的字符串,以便
parseCommand("com.stack.examples.Example.testMethod()");
实际上使用给定的参数调用静态方法(在此示例中,该方法仅打印出"消息已执行")。
答案 0 :(得分:1)
在寻找解决此问题的替代方案后,我发现reflection为我解决了问题:
要执行的静态方法:
ResultSet
主类:
String sql = "SELECT * FROM test";
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
do {
if (rs.getString("sent").equals("0")) {
try{
//if there is a row and it is equals to 0.. so update it to 1..
String sql2 = "UPDATE test SET test='1' WHERE test=....";
Statement updateStatement = <create statement here>;
int rs3 = updateStatement.executeUpdate();
updateStatement.close();
}catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
}while(rs.next());
}else {
try{
//insert if i couldn't get any rows in the table
String sql2 = "INSERT INTO test......";
Statement insertStatement = <create statement here>;
int rs3 = insertStatement.executeUpdate();
insertStatement.close();
}catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
rs.close();
stmt.close();
conn.close();
答案 1 :(得分:0)
使用Java反映:
首先在Example
类中搜索equaly命名方法,然后调用它。
也许还要检查您的方法参数method.getParameters()
Method[] methods = Example.class.getMethods();
for (Method method : methods) {
if(method.getName().equals(command)){
try {
method.invoke(Example.class, null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}