Java 从类类型实例化一个对象

标签 java

我遇到了一个看似简单的问题,但我很难弄明白。我的目标是创建一个 spawner 对象,该对象在调用时创建一个对象,如下所示:

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

这有效,让我可以在我的世界的 0,0 坐标处创建蓝色鱼。但是我没有为我想产卵的每种鱼复制此类,而是想在构造函数中保存我想产卵的鱼的类型,然后在产卵函数中创建该类的对象。 像这样:

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 已被弃用,它也不允许我将参数传递给它的构造函数。但是我设法用谷歌搜索到的所有示例都使用了 newInstance 方法。这里有人能指出我正确的方向吗?

最佳答案

您可以通过执行以下操作来实现它

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

关于Java 从类类型实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63270477/

相关文章:

java - JFrame 表单边框状态不改变

java - 根据下拉值隐藏或显示

java - 多个组的正则表达式问题

java - 使用 toString 方法打印调整后的变量

java - 在Java中发送TAB控制字符

java - Android:如何设置 MenuButton 的监听器?

java - 使用Guice,如何提供同一类型的不同实例?

Java8- "effectively final"

java - 骡子 ESB : Expression Filter with regex() function

java - 使用 hibernate 持久抛出的反射调用方法 object.getId() 抛出lazyInitializeException