在经过一整天的搜索后,我仍然无法弄清楚如何实例化一个自己创建的类的新对象,如果构造函数需要非原始类型的参数。现在我开始怀疑这是否可能!在反射文档中,他们只讨论了原始类型(如int、float、boolean等)。而我找到的所有其他信息/网站/研讨会/示例也只考虑了原始类型来查找构造函数并实例化一个新实例。
所以我想做的是以下内容(分解场景):
假设我有一个名为MyStupidClass的类。另一个类(我们将其命名为MyUsingClass)在构造函数中以MyStupidClass对象作为参数。现在在我的主应用程序中,我希望能够加载MyUsingClass类并从构造函数中实例化一个对象。
这是我到目前为止关于“使用反射”的发现: 使用空构造函数:
在主应用程序中,我现在会做如下操作:
现在,如果我在MyUsingClass中使用一些原始类型,它会看起来像这样:
在主应用程序中,最后一行将更改为类似以下内容:
假设我有一个名为MyStupidClass的类。另一个类(我们将其命名为MyUsingClass)在构造函数中以MyStupidClass对象作为参数。现在在我的主应用程序中,我希望能够加载MyUsingClass类并从构造函数中实例化一个对象。
这是我到目前为止关于“使用反射”的发现: 使用空构造函数:
//the MyUsingClass:
public class MyUsingClass {
//the public (empty) constructor
public MyUsingClass() {
...
}
}
在主应用程序中,我现在会做如下操作:
//get the reflection of the MyUsingClass
Class<?> myUsingClassClass = Class.forName("MyUsingClass");
//get the constructor [I use getConstructor() instead of getConstructors(...) here as I know there is only one]
Constructor<?> myUsingClassConstr = myUsingClassClass.getConstructor();
//instanciate the object through the constructor
Object myInstance = myUsingClassConstr.newInstance(null);
现在,如果我在MyUsingClass中使用一些原始类型,它会看起来像这样:
//the MyUsingClass:
public class MyUsingClass {
//the public (primitive-only) constructor
public MyUsingClass(String a, int b) {
...
}
}
在主应用程序中,最后一行将更改为类似以下内容:
//instanciate the object through the constructor
Object myInstance = myUsingClassConstr.newInstance(new Object[]{new String("abc"), new Integer(5)});
到目前为止没有问题(由于这只是一个分解的例子,上面的代码可能有一些小错误...) 现在关键问题是,如果MyUsingClass看起来像这样,我该如何创建myInstance:
//the MyUsingClass:
public class MyUsingClass {
//the public (primitive-only) constructor
public MyUsingClass(String a, int b, MyStupidObject toto) {
...
}
}
我需要帮助!非常感谢您阅读我的问题!
问候sv
String
不是原始类型。你是否尝试对MyStupidObject
做与String
相同的操作? - BalusC