0 0

如何用反射来构造一个一个参数的对象,但我要用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个答案 按时间排序 按投票排序

0 0

采纳的答案

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
0 0

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
0 0

		Class clazz=null;//自己获取类型
		Constructor c=clazz.getConstructors()[0];//如果就一个构造函数
		Class[] paraTypes=c.getParameterTypes();//构造函数的参数类型
		Class paraType=paraTypes[0];//一个参数的类型

2012年1月09日 17:31

相关推荐

    C#,利用反射动态创建对象

    要使用反射创建对象,首先需要获取目标类型的Type对象。这可以通过以下两种方式完成: - 使用`typeof`关键字:`Type myType = typeof(MyClass);` - 使用`Type.GetType()`方法:`Type myType = Type.GetType(...

    DataReader反射泛型实体对象

    使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...

    JAVA反射知识总结

    在Java中,每个类都有一个对应的Class对象,通过它可以获取类信息并实现反射操作。 - 使用类字面量:`Class class1 = Person.class;` - 通过完整类名获取:`Class class1 = Class.forName(...

    C#反射简单入门实例

    本篇将深入浅出地介绍C#反射的基本概念,以及如何通过反射来创建对象、访问成员和执行方法。 1. 反射的概念 反射是一种在运行时分析类型的能力,它使我们能够动态地获取类型信息,并基于这些信息创建对象、调用方法...

    C# 反射举例 反射实例

    在C#编程语言中,反射是一个强大的特性,它允许运行时的代码动态地获取类型信息并操作对象。本文将深入探讨C#中的反射,并通过具体的实例来帮助大家更好地理解和掌握这个概念。 首先,我们需要理解什么是反射。反射...

    xml与反射.txt

    有了java反射机制,什么都好办了,只需要写一个dao类,四个方法,增删改查,传入不同的对象,就OK啦,无需为每一个 表都创建dao类,反射机制会自动帮我们完成剩下的事情,这就是它的好处。说白了,反射机制就是专门...

    java反射以及复制一个bean的值到另一个bean中。

    在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。通过反射,我们可以动态地创建对象、访问私有成员、调用私有方法,甚至改变对象的行为。Java反射 API 主要...

    C# 反射经典实例,学习反射一步到位

    接下来,我们在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 ...

    c#反射例子的用法(

    上述代码通过`GetConstructor`方法获取了一个构造函数的信息,并通过`Invoke`方法创建了一个新的实例,构造函数接受一个字符串参数。 4. **进一步的操作** 创建完实例后,还可以继续使用反射来调用该实例的方法...

    HardwareInformation_反射_

    2. **获取对象**:有了Class对象后,可以使用`newInstance()`方法创建该类的实例,或者使用`getConstructor()`和`newInstance()`组合来指定构造函数参数创建实例。 3. **查找方法**:反射还允许我们查找类中的方法...

    利用反射,根据类得完全限定名获得该类得实例

    这段代码展示了如何使用`loadClass()`方法加载一个类,并通过`newInstance()`创建一个无参数构造函数的实例。这里需要注意的是,如果目标类没有无参数构造函数或者该构造函数不可见,则会抛出异常。 ##### 示例二:...

    java四种创建对象的方式

    当我们使用new关键字时,Java虚拟机(JVM)会在堆内存中创建一个新对象,并自动调用该对象的构造方法。例如,使用new关键字创建Customer类对象的代码如下: ```java Customer c2 = new Customer("Tom", 20); ``` 这行...

    C#中使用反射遍历一个对象属性及值的小技巧

    在本文中,我们将探讨如何使用反射遍历一个对象的所有属性及其对应的值。 首先,我们需要获取对象的`Type`对象。`Type`对象代表了一个类的元数据,它包含了关于类的所有信息,包括其属性、方法、构造函数等。以下是...

    Java反射机制

    下面是一个简单的示例,演示如何使用反射获取类的信息并创建对象: ```java public class ReflectionExample { public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName(...

    Java反射机制的详细讲解及实例,有助于java深度开发

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这一机制对于理解和利用Java的动态性至关重要,尤其是在进行复杂系统设计、框架开发以及元数据驱动的应用中...

    关于反射的相关笔记

    - `invoke`用于调用方法,第一个参数是调用方法的对象,第二个参数是传入方法的参数列表。 #### 五、总结 反射技术是Java语言中的一项强大功能,能够实现动态获取类信息及操作类的能力。通过以上介绍,我们了解了...

    jOOR,java joor中的joor-fluent反射是一个非常简单的fluent api,它以更直观的方式提供对java类结构的访问。jdk的反射api很难使用,而且冗长。其他语言有更简单的结构来在运行时访问类型元信息。让我们改进Java反射。.zip

    例如,传统的反射API可能需要多行代码来获取一个类的字段值,而使用jOOR,这个过程可以被压缩为一行简洁的代码。 在jOOR中,`Reflect.on()`方法是入口点,你可以传递任何Java对象或类名来开始反射操作。然后,你...

Global site tag (gtag.js) - Google Analytics