假设String数组中给出的参数是:
String [] args = {“ABC”,“5”,“4.4”,“true”};
现在我想通过调用方法class.getConstructor(args)来调用分别获取String,integer,double和Boolean的构造函数。
我正在尝试解析用户在命令行上传递给我的程序的参数,并希望相应地配置我的类。
我将如何做到这一点?
答案 0 :(得分:2)
像#" 5"可以表示String
,integer
或double
,从args数组前进到匹配构造函数是不可能的。正如@Sotirios评论的那样,你必须查看类的所有构造函数,尝试用适当的函数解析args元素,如果成功,那么构造函数是适用的。
然后调用构造函数将是该项目中最简单的部分。
答案 1 :(得分:1)
您提到的方法getConstructor(Class<?>... parameterTypes)
属于Reflection Framework。虽然反思确实有其优点,有时是解决问题的唯一方法,但你应该避免它,除非你有充分的理由。
使用反射使代码正确是困难和乏味的,因为编译器无法检测到大多数错误。 一般用途只是a code smell。
初始化类的常用方法是直接调用相应的构造函数,如@Ralf Kleberhoff所述:MyClass instance = new MyClass(stringParam, intParam, doubleParam, booleanParam);
。
如果大多数参数是可选的,通常只将所需的参数传递给构造函数。这避免了大量不同的构造函数(待测试和记录)。构造函数通常将可选参数设置为合理的默认值。然后使用 setters 设置这些可选参数(如果可用)。
由于你没有真正描述,你想要实现的目标(而不是你当前的问题),我们只能猜测......
我的猜测是,您尝试解析参数,用户会在命令行上传递给您的程序,并希望配置您的课程相应
我对此的回答就是:不要写那段代码!那里有many good libraries。这些测试并提供许多好东西和示例。如果你坚持重新发明轮子,这是一个很好的起点,看看如何做到这一点。