Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以使用class对象实例化一个类吗?建造师呢?_Java_Reflection - Fatal编程技术网

Java 我可以使用class对象实例化一个类吗?建造师呢?

Java 我可以使用class对象实例化一个类吗?建造师呢?,java,reflection,Java,Reflection,我正在通过(Classname.class)存储一个类列表,是否要实例化一个?这可能吗 newInstance似乎是我想要的方法,但它不支持构造函数?您可以使用(或Class.getConstructor)获取可用构造函数的列表,并调用其中任何一个,它接受参数。Java很好地涵盖了这一点。但是是的,基本上是Class.getConstructors,然后Constructor.newInstance就是它所在的位置。如果你有一个通过类文本获得的Class对象列表,你最好静态地引用构造函数,而不是

我正在通过(
Classname.class
)存储一个类列表,是否要实例化一个?这可能吗


newInstance
似乎是我想要的方法,但它不支持构造函数?

您可以使用(或Class.getConstructor)获取可用构造函数的列表,并调用其中任何一个,它接受参数。

Java很好地涵盖了这一点。但是是的,基本上是Class.getConstructors,然后Constructor.newInstance就是它所在的位置。

如果你有一个通过类文本获得的
Class
对象列表,你最好静态地引用构造函数,而不是陷入反射邪恶。

Java的设计是为了让你永远不会“欺骗”只要您使用java.lang/java,就可以使用它。类或其他标准库。OOP最重要的一点是对象应该处于已定义的状态,因此构造函数始终运行是安全的。即使您正在使用一些外观奇怪的反射库来完成工作

因此,使用Class.forName(“me.Test”).newInstance();(或类似)将在后台为您调用Test()构造函数

如果要调用另一个构造函数,代码如下:

Test test = (Test)Class.forName("Test").getConstructor(String.class).newInstance("Hello World");

在这里,getConstructor询问构造函数的外观(它需要一个字符串),然后用字符串调用它。

只需添加一点,我发现缺少:

如果
对象具有公共空构造函数,则可以直接在该对象上调用
newInstance
。(空构造函数是不带参数的构造函数。)


否则,您可以像其他人所说的那样,通过
Class.getConstructors()
找到构造函数。

您不能以这种方式构造新类

如果您有一个类的名称,那么可以使用class.forName(className)来加载/引用一个类


如果您有要创建的类的字节码,可以让类加载器加载字节码并为您提供该类。这可能比您预期的更高级。

实例化可能是在一个服务程序中完成的,该程序将与其他几个尚未创建的程序链接在一起。他们将调用服务程序,每个服务程序都有一个不同的列表,其中包含服务程序编写时不存在的类的类变量。他询问的是如何实例化该类的新实例,而不是创建类对象(也不是如何获取字节码)。这不应标记为正确答案。继续阅读下面安德里的答案。@ryanshlington这回答了最初的问题。该问题被编辑为另一个问题,即
andri
所回答的问题。现在不推荐使用
Class.newInstance
方法。