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 클래스의 하위 클래스입니다. 플레이어 오브젝트에 저장되어있는 Weapon 레퍼런스의 딥 카피에 대한 코드를 알아 내려고하고 있습니다. 무기는 추상이기 때문에 복사 생성자를 호출 할 수 없습니다. 내 스틱 클래스에서는 복사 생성자가 세 번째 생성자이므로 try 문에서 생성 배열에 2를 하드 코딩했습니다. 예를 들어 복사 생성자 앞에 새로운 생성자를 추가하거나 순서를 변경하여 스틱 클래스의 생성자를 변경하면 런타임에 복사 생성자의 위치를 어떻게 찾을 수 있습니까?
또한 제네릭을 사용 해 본 적이 없으므로, 일반적으로 좋은 프로그래밍 방법으로 간주되는 것을 따르지 않을 경우 수정하십시오.
저는 이것을 반영하는 것이 좋은 생각인지 잘 모르겠습니다. 'Weapon' 클래스에'public abstract Weapon deepCopy()'메소드를 추가하는 것을 고려할 수 있습니다. 그러면 각 서브 클래스가 구현해야합니다. – biziclop
@biziclop 나는 당신의 제안이 더 좋은 아이디어일지도 모른다고 생각하지만, 나는 그것을 어떻게 구현할 것인지 모른다. 스틱과 같은 임의의 하위 클래스를 보유하고있는 플레이어 클래스에 Weapon 속성이 있습니다. 내 getter를 작성하여 참조를 전달하는 대신 사본을 작성하고 싶습니다. 이게 그렇게 될까? '공용 무기 getWeapon() {return weapon.deepCopy(); }' – Gilbrilthor
예, 그것이 제가 의미했던 것입니다. – biziclop