Java Создание экземпляра объекта из типа класса - PullRequest
3 голосов
/ 05 августа 2020

Я столкнулся с, казалось бы, простой проблемой, которую мне трудно решить. Моя цель - создать объект spawner, который создает объект всякий раз, когда он вызывается, что-то вроде этого:

public class FishSpawner{
   public Fish spawnFish(){
      return new BlueFish(0, 0);
   }
}

Это работает и позволяет мне создавать синий fi sh в координатах 0,0 моего мира. . Но вместо того, чтобы копировать этот класс для каждого типа Fi sh, который я хочу создать, я решил, что сохраняю тип fi sh, который хочу создать в конструкторе, а затем создаю объект этого класса в функции создания. Например:

public class FishSpawner{

private Class<? extends Fish> fishType;

public FishSpawner(Class<? extends Fish> fishType){
   this.fishType = fishType;
}

   public Fish spawnFish(){
      return fishType.newInstance(0, 0);
   }
}

Однако это не работает. Он сообщает мне, что newInstance устарел, а также не позволяет мне передавать аргументы его конструктору. Но все примеры, которые мне удалось найти в Google, используют метод newInstance. Может ли кто-нибудь указать мне правильное направление?

1 Ответ

3 голосов
/ 05 августа 2020

Вы можете достичь этого, выполнив следующие действия

public <T extends Fish> spawnFish(){
      Constructor<T> constructor = fishType.getConstructor(Integer.class, Integer.class);
      return constructor.newInstance(0, 0);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...