如何使用类名(动态)创建特定类的实例并将参数传递给它是类的函数?
我的伪代码是:
String className = "login";
Class<?> clazz = Class.forName(className);
clazz.checkUserFunc(argument);
checkUserFunc函数是Login类的成员
答案 0 :(得分:0)
您可以获取与getConstructor
的给定参数匹配的类构造函数的实例。
Constructor<?> ctor=thisClass.getConstructor(<arguments>); // where arguments are the parameters expected by the constructor.
然后,您可以创建该类的实例,并使用getDeclaredMethod
调用您喜欢的任何方法。
getDeclaredMethod(String name, Class...<?> parameterTypes)
答案 1 :(得分:0)
首先,您必须创建一个新类的实例:
Object o = clazz.newInstance();
注意:如果您的类没有默认构造函数,newInstance()
将抛出异常。在这种情况下,您必须从类中查询相应的构造函数并调用它。这只是有意义的,如果你有某种惯例,例如构造函数必须完全接受String
参数左右(参见Creating an instance using the class name and calling constructor)。最简单的方法是需要一个默认的构造函数,所以上面的代码可以工作。
然后您可以调用对象的任何实例方法。通常你应该有另一个约定,比如类必须实现接口MyInterface
。这样可以轻松调用您的方法:
MyInterface myObj = (MyInterface)o;
myObj.checkUserFunc(argument);