我获得了一些我不知道的课程。其中一些作为示例显示:
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
}
}
任务是根据需要重新设计方法签名类型并添加实现。烘焙方法应符合以下条件:
无论我尝试过什么,都会遇到错误:Main.java ::错误:类型不兼容:对象无法转换为Cake蛋糕蛋糕= baker.bake(Cake.class);
我想出的最好的方法是:
公共对象烘烤(类顺序)抛出异常{返回order.getDeclaredConstructor()。newInstance();
我知道这是错误的,但我完全被困在这里。有人可以解释发生了什么吗?
您的方法返回无法转换为Cake的java.lang.Object。您必须对方法进行泛化,使其仅接受Bake的子类型,并返回与提供的类实例的参数化类型相同的类型。这是它的外观。
static class ReflexiveBaker {
public static <T extends Bakery> T bake(Class<T> order) {
try {
return order.getDeclaredConstructor().newInstance();
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
System.out.println("Class instance could not be instantiated.");
}
throw new AssertionError();
}
}