Open LamGC opened 4 years ago
给这个功能举个例子:
public class MainCommand {
@Command()
public int getRandomNumber(@Argument(name = "max") int max, Random random) {
if(random == null) {
random = new Random();
}
return random.nextInt(max);
}
}
random
是一个没有类型对应StringParameterParser
,也没有@Argument
注解的参数,但ArgumentsRunner
的调用方在调用run
方法的时候可以传递一组对象进去,例如:
Set<Object> objectSet = new HashSet<>();
objectSet.add(new Random());
new ArgumentsRunner(MainCommand.class).run(new MainCommand(), objectSet);
这样 MainCommand.getRandomNumber
方法的random
参数就不会为null
,而是传入了objectSet
里的Random
对象。
这个设计有一些问题或前提要求:
Spring
里的@Autowired
?但是这样会要导入Spring,不是很好);或许可以仅限制generateParamListByFlag
返回的List长度满足带@Argument
注解参数的数量即可,然后再进行补充?
如果可以的话,打算先让ArgumentsRunner内的参数解析部分模块化后再这么做(如果确定要这么做的话)。
尝试给
ArgumentsRunner
增加对未标注@Argument
注解的参数,或标注了特定注解的参数注入对象的功能,类似于 Spring 的参数绑定一样。 详细计划的细节稍后补充。