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());
}
我有一个任务,我必须实现创建给定 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());
}