java反射实现假设某个任务的处理流程有四部,分别是 (1)输入4个整数 (2)对四个数进行排序,根据参数决定排序的方式,1是升序,2是降序 (3)对这4个数,每个都加上一个指定的数字 (4)将处理后的数字输出 要求: (1)通过读配置文件实现以上流程 (2)可以通过修改配置文件从而修改流程,比如不需要第三步,或者将第二步和第三步交换 (3)配置文件用文本文件
时间: 2023-06-16 15:07:03 浏览: 82
java反射···有兴趣的可以去下载··本人亲手敲打 注释清楚·
Java反射可以用来动态地加载类、调用方法和访问属性,可以实现基于配置文件的流程控制。下面是一个基于反射的实现代码:
首先,定义一个Task类表示任务,包含四个方法,分别对应四个处理步骤:
```java
public class Task {
public void input(int a, int b, int c, int d) {
// 输入4个整数
}
public void sort(int order) {
// 对四个数进行排序,order=1是升序,order=2是降序
}
public void add(int x) {
// 对这4个数,每个都加上一个指定的数字x
}
public void output() {
// 将处理后的数字输出
}
}
```
接下来,定义一个Config类表示配置文件,包含四个字段,分别对应四个处理步骤的类名和方法名:
```java
public class Config {
public String inputClass; // 输入4个整数的类名
public String inputMethod; // 输入4个整数的方法名
public String sortClass; // 排序的类名
public String sortMethod; // 排序的方法名
public String addClass; // 加上指定数字的类名
public String addMethod; // 加上指定数字的方法名
public String outputClass; // 输出处理后的数字的类名
public String outputMethod; // 输出处理后的数字的方法名
}
```
接下来,读取配置文件:
```java
public Config readConfig(String filename) throws IOException {
Properties props = new Properties();
props.load(new FileInputStream(filename));
Config config = new Config();
config.inputClass = props.getProperty("input.class");
config.inputMethod = props.getProperty("input.method");
config.sortClass = props.getProperty("sort.class");
config.sortMethod = props.getProperty("sort.method");
config.addClass = props.getProperty("add.class");
config.addMethod = props.getProperty("add.method");
config.outputClass = props.getProperty("output.class");
config.outputMethod = props.getProperty("output.method");
return config;
}
```
接下来,执行任务:
```java
public void execute(Config config, int a, int b, int c, int d, int x, int order) throws Exception {
// 输入4个整数
Class<?> inputClazz = Class.forName(config.inputClass);
Method inputMethod = inputClazz.getDeclaredMethod(config.inputMethod, int.class, int.class, int.class, int.class);
inputMethod.invoke(inputClazz.newInstance(), a, b, c, d);
// 排序
Class<?> sortClazz = Class.forName(config.sortClass);
Method sortMethod = sortClazz.getDeclaredMethod(config.sortMethod, int[].class, int.class);
int[] array = {a, b, c, d};
sortMethod.invoke(sortClazz.newInstance(), array, order);
// 加上指定数字
Class<?> addClazz = Class.forName(config.addClass);
Method addMethod = addClazz.getDeclaredMethod(config.addMethod, int[].class, int.class);
addMethod.invoke(addClazz.newInstance(), array, x);
// 输出处理后的数字
Class<?> outputClazz = Class.forName(config.outputClass);
Method outputMethod = outputClazz.getDeclaredMethod(config.outputMethod, int[].class);
outputMethod.invoke(outputClazz.newInstance(), array);
}
```
这个execute方法根据配置文件中的类名和方法名,动态加载类和调用方法,实现了基于配置文件的任务流程控制。
最后,可以在配置文件中配置具体的类名和方法名,例如:
```properties
input.class=com.example.InputTask
input.method=input
sort.class=com.example.SortTask
sort.method=sort
add.class=com.example.AddTask
add.method=add
output.class=com.example.OutputTask
output.method=output
```
这个配置文件指定了四个处理步骤的类名和方法名,可以通过修改配置文件来修改流程,比如不需要第三步,或者将第二步和第三步交换。
阅读全文