LamGC / java-utils

一个不断更新(个鬼),良好的开发工具库,减少不必要的时间开发重复的功能。A continuously updated, good development tool library, reducing unnecessary time to develop duplicate functions.
Apache License 2.0
2 stars 1 forks source link

使 ArgumentsRunner 支持参数绑定 #1

Open LamGC opened 4 years ago

LamGC commented 4 years ago

尝试给 ArgumentsRunner 增加对未标注 @Argument 注解的参数,或标注了特定注解的参数注入对象的功能,类似于 Spring 的参数绑定一样。 详细计划的细节稍后补充。

LamGC commented 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对象。 这个设计有一些问题或前提要求:

LamGC commented 4 years ago

或许可以仅限制generateParamListByFlag返回的List长度满足带@Argument注解参数的数量即可,然后再进行补充?
如果可以的话,打算先让ArgumentsRunner内的参数解析部分模块化后再这么做(如果确定要这么做的话)。