java - 责任链自动生成器
问题描述
我有 8 个处理程序类,有没有办法可以在 java 中动态创建链?
我的意思是,如果我现在有两个课程,例如:
处理程序A
处理程序B
处理程序链
HandlerChain 将创建链,HandlerA->HandlerB,(使用循环从文件夹中读取所有类名)
当我添加 HandlerC 时,它会自动添加而无需任何交互,并且链变为 HandlerA->HandlerB->HandlerC。
-------------------------------------------------- ------
所以如果我有 String className = "HandlerA"
我使用隐私字符串创建 HandlerA.class 实例的方式是什么?
解决方案
File folder = new File("JavaClassesPath");
ArrayList<String> all = new ArrayList<>();
for (final File fileEntry : folder.listFiles()) {
if (!fileEntry.isDirectory()) {
all.add(fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf('.')));
}
}
String className = "PackageName";
for (String s: all) {
if (!s.equals("AbstractClassName")) {
Class<?> clazz = Class.forName(className + '.' + s);
Constructor<?> ctor = clazz.getConstructor();
Object object = ctor.newInstance();
allHandlers.add((RequestHandler) object);
}
}
for(int i=0; i<allHandlers.size()-1; i++){
allHandlers.get(i).setNextHandler(allHandlers.get(i+1));
}
推荐阅读
- python - 无法从 Dockerfile 为烧瓶 python 应用程序构建?
- java - 在 JUnit 5 中将测试摘要打印到控制台
- parallel-processing - 如何在与 GNU-parallel 并行的循环中并行化 csh
- python - 是否有任何工具或算法可以将 3D 点云转换为 2.5D 图像?
- reactjs - 在 React.js 中使用分页进行实时搜索
- javascript - 使用 Tagsinput Bootstrap 在 console.log 上重复值
- node.js - Summernote 不能在 laravel 中使用 npm
- flutter - Flutter,如何更改列表视图项的大小?
- python - “ AttributeError:‘用户’对象没有属性‘编辑’” discord.py 错误
- linux - 在 Heroku 上达到的文件观察者数量的系统限制