-
如何用反射来构造一个一个参数的对象,但我要用null来构造3
因为用null作为参数并用反射来构造对象时是调用的默认构造函数。但要反射的类中没有默认构造函数。而且这个一个参数的构造函数的参数类型是不确定的。所以我想用null来调用。但如何做到呢?
问题补充:chen_yongkai 写道Class clazz=null;//自己获取类型 Constructor c=clazz.getConstructors()[0];//如果就一个构造函数 Class[] paraTypes=c.getParameterTypes();//构造函数的参数类型 Class paraType=paraTypes[0];//一个参数的类型
什么意思?知道构造函数参数的类型又怎么构造对象呢?
public Class Test { public Test(Integer i) { if (i == null) System.out.println("args is null!"); } } public static void main(final String[] args) throws Exception { Constructor ctor = Test.class.getConstructors()[0]; Class cls = (ctor.getParameterTypes()[0]); ctor.newInstance(null);// how ?? }
问题补充:chen_yongkai 写道public static void main(final String[] args) throws Exception { Constructor ctor = Test.class.getConstructors()[0]; Class cls = (ctor.getParameterTypes()[0]); ctor.newInstance(cls.newInstance());// how ?? }
我说的是要用null作为参数传入来构造对象。你这里是用实际的对象啊。2012年1月09日 12:39
3个答案 按时间排序 按投票排序
-
采纳的答案
import java.lang.reflect.Constructor; public class Test { public Test(Integer i) { if (i == null) System.out.println("args is null!"); } public static void main(String[] args) throws Exception { Constructor cons = Test.class.getConstructors()[0]; Class type = (cons.getParameterTypes()[0]); Object para = type.cast(null);//这样就能满足你的要求了 cons.newInstance(para);// 用null做参数,如果构造函数有校验可能通过不了,而且对数据的完整性有影响,不推荐。 } }
2012年1月10日 09:42
-
public static void main(final String[] args) throws Exception { Constructor ctor = Test.class.getConstructors()[0]; Class cls = (ctor.getParameterTypes()[0]); ctor.newInstance(cls.newInstance());// how ?? }
2012年1月10日 00:06
-
Class clazz=null;//自己获取类型 Constructor c=clazz.getConstructors()[0];//如果就一个构造函数 Class[] paraTypes=c.getParameterTypes();//构造函数的参数类型 Class paraType=paraTypes[0];//一个参数的类型
2012年1月09日 17:31
相关推荐
要使用反射创建对象,首先需要获取目标类型的Type对象。这可以通过以下两种方式完成: - 使用`typeof`关键字:`Type myType = typeof(MyClass);` - 使用`Type.GetType()`方法:`Type myType = Type.GetType(...
使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...
在Java中,每个类都有一个对应的Class对象,通过它可以获取类信息并实现反射操作。 - 使用类字面量:`Class class1 = Person.class;` - 通过完整类名获取:`Class class1 = Class.forName(...
本篇将深入浅出地介绍C#反射的基本概念,以及如何通过反射来创建对象、访问成员和执行方法。 1. 反射的概念 反射是一种在运行时分析类型的能力,它使我们能够动态地获取类型信息,并基于这些信息创建对象、调用方法...
在C#编程语言中,反射是一个强大的特性,它允许运行时的代码动态地获取类型信息并操作对象。本文将深入探讨C#中的反射,并通过具体的实例来帮助大家更好地理解和掌握这个概念。 首先,我们需要理解什么是反射。反射...
有了java反射机制,什么都好办了,只需要写一个dao类,四个方法,增删改查,传入不同的对象,就OK啦,无需为每一个 表都创建dao类,反射机制会自动帮我们完成剩下的事情,这就是它的好处。说白了,反射机制就是专门...
在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。通过反射,我们可以动态地创建对象、访问私有成员、调用私有方法,甚至改变对象的行为。Java反射 API 主要...
接下来,我们在ASP.NET页面中编写了一个名为`test1`的函数,展示了如何使用反射来调用`ReflectTest`类的方法。在这个函数中: 1. 加载DLL文件:通过`System.Reflection.Assembly.LoadFile`方法加载位于指定路径的`...
1. `Class`对象:每个类在内存中都有一个对应的`Class`对象,可以通过`Class.forName()`方法获取,也可以通过`Object.getClass()`或类型.class来得到。`Class`对象提供了获取类信息的方法,如获取类名、父类、接口、...
3. 调用`Method`对象的`invoke()`方法:传入null作为第一个参数,因为静态方法不需要实例对象。第二个参数是传递给静态方法的实际参数。 以下是一个简单的示例,演示如何使用反射调用静态方法: ```java public ...
上述代码通过`GetConstructor`方法获取了一个构造函数的信息,并通过`Invoke`方法创建了一个新的实例,构造函数接受一个字符串参数。 4. **进一步的操作** 创建完实例后,还可以继续使用反射来调用该实例的方法...
2. **获取对象**:有了Class对象后,可以使用`newInstance()`方法创建该类的实例,或者使用`getConstructor()`和`newInstance()`组合来指定构造函数参数创建实例。 3. **查找方法**:反射还允许我们查找类中的方法...
这段代码展示了如何使用`loadClass()`方法加载一个类,并通过`newInstance()`创建一个无参数构造函数的实例。这里需要注意的是,如果目标类没有无参数构造函数或者该构造函数不可见,则会抛出异常。 ##### 示例二:...
当我们使用new关键字时,Java虚拟机(JVM)会在堆内存中创建一个新对象,并自动调用该对象的构造方法。例如,使用new关键字创建Customer类对象的代码如下: ```java Customer c2 = new Customer("Tom", 20); ``` 这行...
在本文中,我们将探讨如何使用反射遍历一个对象的所有属性及其对应的值。 首先,我们需要获取对象的`Type`对象。`Type`对象代表了一个类的元数据,它包含了关于类的所有信息,包括其属性、方法、构造函数等。以下是...
下面是一个简单的示例,演示如何使用反射获取类的信息并创建对象: ```java public class ReflectionExample { public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName(...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这一机制对于理解和利用Java的动态性至关重要,尤其是在进行复杂系统设计、框架开发以及元数据驱动的应用中...
- `invoke`用于调用方法,第一个参数是调用方法的对象,第二个参数是传入方法的参数列表。 #### 五、总结 反射技术是Java语言中的一项强大功能,能够实现动态获取类信息及操作类的能力。通过以上介绍,我们了解了...
例如,传统的反射API可能需要多行代码来获取一个类的字段值,而使用jOOR,这个过程可以被压缩为一行简洁的代码。 在jOOR中,`Reflect.on()`方法是入口点,你可以传递任何Java对象或类名来开始反射操作。然后,你...