如何在构造函数数组中查找复制构造函数

Gil*_*hor 2 java generics reflection abstract-class copy-constructor

我使用getConstructors()方法来拉取类的构造函数.该类在一个抽象的超类引用中,我不知道在用户决定之前调用哪个子类.这是我到目前为止所拥有的.

Weapon stickCopy = stick;
System.out.println(stick);
System.out.println(stickCopy);

Class <? extends Weapon> myClass = stick.getClass( );

System.out.println(myClass.getSimpleName( ));

Constructor<?>[] construct = myClass.getConstructors( );

for(Constructor<?> constructor: construct)
{
    System.out.println(constructor);
}

try
{
    stickCopy = (Weapon) construct[2].newInstance((stick));
}
catch (Exception e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

System.out.println(stick);
System.out.println(stickCopy);
Run Code Online (Sandbox Code Playgroud)

Stick类是抽象Weapon类的子类.我试图找出存储在播放器对象中的武器参考的深拷贝的代码.由于Weapon是抽象的,我无法从中调用复制构造函数.在我的Stick类中,复制构造函数是第三个构造函数,因此我将2硬编码到try语句的构造数组中.如果我通过在复制构造函数前添加新构造函数或重新排序它们来更改stick类的构造函数,如何在运行时找到复制构造函数的位置?

另外,我之前从未使用过Generics,因此,如果我没有遵循通常被认为是良好的编程习惯,请更正我.

Sam*_*ard 5

如果使用带参数的getConstructor版本,则可以通过其参数类型指定所需的构造函数.大概你想要传递Stick.class或Weapon.class:

Constructor constructor = myClass.getConstructor(myClass);
Run Code Online (Sandbox Code Playgroud)