Creating an instance using the class name and calling constructor
有没有一种方法可以在给定类名(动态)的情况下创建特定类的实例,并将参数传递给它的构造函数。
类似:
1 |
其中,
是的,比如:
1 2 3 |
当然,这只适用于单个字符串参数,但是您可以非常容易地修改它。
请注意,类名必须是完全限定的类名,即包括命名空间。对于嵌套类,需要使用一美元(编译器就是这样使用的)。例如:
1 2 3 4 5 6 | package foo; public class Outer { public static class Nested {} } |
为了获得
您可以使用
然后使用
最后,在该对象上调用
1 2 3 |
你可以使用反射
1 |
如果类只有一个空构造函数(如Activity或Fragment等,android类):
1 2 | Class<?> myClass = Class.forName("com.example.MyClass"); Constructor<?> constructor = myClass.getConstructors()[0]; |
使用(即)
如果要访问非公共构造函数,则必须使用(即)
您希望使用java. Lang.Exrave.Trimult.NeWist立场(对象…)
使用EDCOX1(10)与构造函数参数(S)传递的Java中创建对象的非常简单的方法:
案例1:这里是这个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class Main { public static void main(String args[]) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // Get class name as string. String myClassName = Base.class.getName(); // Create class of type Base. Class<?> myClass = Class.forName(myClassName); // Create constructor call with argument types. Constructor<?> ctr = myClass.getConstructor(String.class); // Finally create object of type Base and pass data to constructor. String arg1 ="My User Data"; Object object = ctr.newInstance(new Object[] { arg1 }); // Type-cast and access the data from class Base. Base base = (Base)object; System.out.println(base.data); } } |
这里是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
案例2:-您可以对具有多个参数的构造函数和复制构造函数进行类似的编码。例如,将3个参数作为参数传递给
1 2 |
在这里,基类看起来应该是:
1 2 3 4 5 6 |
注意:不要忘记处理代码中需要处理的各种异常。
如果有人正在寻找一种方法来创建类的实例,尽管类遵循单例模式,下面是一种方法。
1 2 3 4 5 6 7 8 9 10 11 | // Get Class instance Class<?> clazz = Class.forName("myPackage.MyClass"); // Get the private constructor. Constructor<?> cons = clazz.getDeclaredConstructor(); // Since it is private, make it accessible. cons.setAccessible(true); // Create new object. Object obj = cons.newInstance(); |
这只适用于使用私有构造函数实现单例模式的类。
还可以在创建的对象内调用方法。
可以通过调用第一个constractor立即创建对象,然后调用所创建对象中的第一个方法。
1 2 3 4 |
另一个有用的答案。如何使用getconstructor(params).newinstance(args)?
1 2 3 | return Class.forName(**complete classname**) .getConstructor(**here pass parameters passed in constructor**) .newInstance(**here pass arguments**); |
在我的例子中,我的类的构造函数将WebDriver作为参数,因此使用以下代码:
1 2 3 | return Class.forName("com.page.BillablePage") .getConstructor(WebDriver.class) .newInstance(this.driver); |