这很可能是一个愚蠢的问题,但是我是Java的新手,所以…
我目前有一些代码,目前正在使用 clazz.asSubclass(asSubclassOfClass).getConstructor().newInstance()
clazz.asSubclass(asSubclassOfClass).getConstructor().newInstance()
我需要将一些参数传递给构造函数,因此我想将其更改为: clazz.asSubclass(asSubclassOfClass).getConstructor(params).newInstance(args)
clazz.asSubclass(asSubclassOfClass).getConstructor(params).newInstance(args)
我不明白的是,我需要以 参数形式 传递什么,我需要以 args 传递什么。
假设我想传入一个字符串“ howdy”和一些名为XyzObj的XYZ类型的对象。我该如何指定呢?我将通过什么作为参数,而将通过什么作为参数?
在Java中,这称为Reflection。
假设该类具有此构造函数,否则我相信您将获得NoSuchMethod异常。
clazz.asSubclass(asSubclassOfClass) .getConstructor(String.class,XYZ.class) .newInstance("howdy",XyzObj);
既然您是Java的新手,那么让我给您一个简单的方法,以便您了解执行此操作时的实际情况。
假设您有以下课程:
public class ParentClazz{ String someVar; public ParentClazz(){ someVar="test"; } public ParentClazz(String someVar){ System.out.println("I have been invoked"); this.someVar=someVar; } }
然后,您具有以下主要方法:
public static void main(String[] args) throws ParseException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { ParentClazz.class.asSubclass(ParentClazz.class).getConstructor(String.class).newInstance("howdy"); }
如果运行此命令,您会注意到控制台输出打印消息-我已被调用。这意味着您使用反射调用了ParentClazz的构造函数。
如果方案允许您执行相同的操作,则可以使用标准的对象创建过程:
ParentClazz clazz = new ParentClazz("howdy");
希望这可以帮助您理解。