Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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中从类对象构造类实例_Java_Class - Fatal编程技术网

在java中从类对象构造类实例

在java中从类对象构造类实例,java,class,Java,Class,我需要从类对象数组中创建一个类的新实例,如下所示: static Class[] spells = {Fireball.class, Iceball.class}; 所以当我想叫火球的时候,我应该可以做一些类似的事情 Spell Currentspell = new spells[0](posx, posy); 火球和冰球是顺便说一句的子类法术 我该怎么做 谢谢。您需要通过反射调用类的相应构造函数 请参阅中的“创建新对象”部分,您可以使用该方法获取所需的特定构造函数,然后调用构造函数对象。首

我需要从类对象数组中创建一个类的新实例,如下所示:

static Class[] spells = {Fireball.class, Iceball.class};
所以当我想叫火球的时候,我应该可以做一些类似的事情

Spell Currentspell = new spells[0](posx, posy);
火球和冰球是顺便说一句的子类法术

我该怎么做


谢谢。您需要通过反射调用类的相应构造函数


请参阅

中的“创建新对象”部分,您可以使用该方法获取所需的特定构造函数,然后调用构造函数对象。

首先,您需要缩小可存储在数组中的类的类型。第二,你的实例化代码是关闭的。不必讨论这是否是实现这一点的最佳方法,下面是一些(更好的)代码:

Constructor constructor = spells[0].getConstructor(int.class, int.class);
Spell Currentspell = (Spell)constructor.newInstance(posx, posy);
静态类[]拼写=新类[]{Fireball.Class,Iceball.Class};
Spell currentSpell=拼写[someIndex].newInstance();

您最好告诉我们您正在尝试实现的效果,而不是您当前使用的代码。一旦我们知道这一切是什么,也许有一种更干净的方法来做这一切。当我在一个通常不需要这样做的应用程序中看到大量使用反射时,我的代码嗅觉雷达总是会上升。我正在尝试这样做:
try{Constructor Constructor=spells[0]。getConstructor(Integer.class,Integer.class);Spell Currentspell=(Spell)Constructor.newInstance(100100);}catch(Throwable e){System.err.println(e);}
但它不会给我一个错误或创建类instance@KristofferDorph
Currentspell
实例是否为空?请尝试捕获
异常e
而不是
可丢弃的e
。此外,您可以发布您尝试使用的
火球
的构造函数吗?非常感谢,让它工作了!:-)是一个小错误从我这方面来说,但是你解决了,谢谢你!
static Class<Spell>[] spells = new Class<Spell>[] { Fireball.class, Iceball.class };
Spell currentSpell = spells[someIndex].newInstance();