Java 中的泛型和反射。 类

Generics and reflection in Java. Classes

我有一个任务,我必须实现创建给定 class 对象的方法。

class Paper {}

class Bakery {}

class Cake extends Bakery {}

class ReflexiveBaker {
  
  /**
   * Create bakery of the provided class.
   * 
   * @param order class of bakery to create
   * @return bakery object
   */
  public Object bake(Class order) {
    // Add implementation here
  }
  
}

我应该如何正确实现这个方法?我试过这样做

public <T extends Bakery> T bake(Class<T> order) {
        try {
            return order.getDeclaredConstructor().newInstance();
        } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

但它总是抛出 NoSuchMethodException。此外,从任务“保证面包店的所有子 class 将具有 public 无参数构造函数。” 并且 InvocationTargetException 没有导入到任务中,因此应该在没有它的情况下实现。有什么问题?

这是怎么做的。你必须使用 getDeclaredConstructor()

class Paper {
}

class Bakery {
}

class Cake extends Bakery {
}

class ReflexiveBaker {

    /**
     * Create bakery of the provided class.
     *
     * @param order class of bakery to create
     * @return bakery object
     */
    public static <T extends Bakery> T bake(Class<T> order) {
        try {
            return order.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException("Failed to instantiate class of type " + order, e);
        }
    }

}

用法

public static void main(String[] args) {
    Cake cake = ReflexiveBaker.bake(Cake.class);
    System.out.println(cake.getClass());
}