Я использую метод 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);
Класс Stick - это подкласс абстрактного класса Weapon.Я пытаюсь выяснить код для глубокой копии из ссылки на оружие, хранящейся в объекте игрока.Так как Оружие абстрактно, я не могу вызвать конструктор копирования из него.В моем классе Stick конструктор копирования является третьим конструктором, и поэтому я жестко закодировал 2 в массиве конструкций в инструкции try.Если я изменю конструкторы класса stick, скажем, добавив новый конструктор перед конструктором копирования или переупорядочив их, как я могу найти позицию конструктора копирования во время выполнения?
Кроме того, у меня естьникогда раньше не использовал Generics, поэтому, если я не следую тому, что обычно считается хорошей практикой программирования, поправьте меня.