本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看 活动链接
Q:
有没有一种方法可以给定类名称(动态)来创建特定类的实例,并将参数传递给其构造函数。
就像是下面这样的
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
复制代码
其中 MyAttributeValue 是 MyClass 构造函数的参数。
A:
你可以像下面这样写:
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
复制代码
当然,这仅适用于单个字符串参数,但是您可以轻松地对其进行修改。
请注意,类名称必须是完全符合的名称,即包括名称空间。对于嵌套类,您需要使用美元符号(因为这是编译器使用的美元符号)。例如:
package foo;
public class Outer
{
public static class Nested {}
}
复制代码
要为此获得 Class 对象,您需要使用 Class.forName(“ foo.Outer $ Nested”)
。
Other
#107
您可以使用 Class.forName() 获取所需类的Class对象。
然后使用 getConstructor() 查找所需的Constructor对象。
最后,在该对象上调用 newInstance() 以获取新实例。
Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");
复制代码
#85
您可以使用反射
return Class.forName(className).getConstructor(String.class).newInstance(arg);
复制代码
#16
如果class只有一个空的构造函数(例如Activity或Fragment等,android类):
Class<?> myClass = Class.forName("com.example.MyClass");
Constructor<?> constructor = myClass.getConstructors()[0];
复制代码
#9
使用 getConstructor(String.lang) 时,必须将构造方法声明为 public。否则,将引发 NoSuchMethodException。
如果要访问非公共构造函数,则必须改用 getDeclaredConstructor(String.lang)。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END