#### 写一个程序执行 ,读取配置文件里的类和方法, 并执行 > 注:我们写程序的时候,很多时候,不知道要执行的是什么类,也不知道执行什么方法。 > > - 方法要有一个String类型的参数, 参数的值由配置文件配置。
时间: 2024-09-20 12:17:21 浏览: 38
为了编写这样一个程序,你可以使用Java的反射API,它允许你在运行时动态地获取和调用类的方法。以下是一个简单的示例步骤:
1. **加载配置文件**:
首先,你需要从配置文件(例如XML、YAML或Properties文件)中读取相关信息。这通常涉及到解析文件并提取出类名(字符串)和方法名(字符串),以及对应于方法的参数值。
```java
import java.io.IOException;
import java.util.Properties;
public class ConfigLoader {
public static void loadConfig(String configFile) {
Properties props = new Properties();
try {
props.load(new FileInputStream(configFile));
String className = props.getProperty("class");
String methodName = props.getProperty("method");
// 获取方法参数,这里假设配置文件已经包含参数值
String paramValue = props.getProperty("param");
} catch (IOException e) {
System.err.println("Error loading config file: " + e.getMessage());
}
}
}
```
2. **创建和初始化类实例**:
根据类名动态创建一个Class对象,并检查是否存在这个类。
```java
Class<?> clazz;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
System.err.println("Class not found: " + className);
return;
}
```
3. **查找并调用方法**:
使用`Class`对象找到对应的方法,然后通过反射创建`Method`对象。注意,由于Java的泛型限制,如果你的方法有类型参数,可能需要额外处理。
```java
Method method;
try {
method = clazz.getMethod(methodName, String.class); // 假设方法接受一个String参数
} catch (NoSuchMethodException e) {
System.err.println("No such method: " + methodName);
return;
}
// 如果配置文件中有参数值,设置方法的参数
Object[] args = {paramValue};
```
4. **执行方法**:
最后,使用`invoke`方法执行方法。这将调用指定的方法,传递给它的参数。
```java
if (method.isAccessible()) {
try {
method.invoke(null, args); // 第一个null表示当前上下文对象,对于静态方法可以省略
} catch (IllegalAccessException | InvocationTargetException e) {
System.err.println("Error executing method: " + e.getMessage());
}
} else {
method.setAccessible(true); // 如果方法默认不可见,这里开启访问权限
// 然后再尝试执行
}
```
阅读全文