[英]Java - Get instances of abstract class by <class ? extends SuperClass> with parameters
如果标题含糊不清,请问。
请允许我详细说明我的问题:
想象一下,我有一个名为“ Car”的类,它是一个抽象类。 现在,假设我有多个Car实例,例如Audi,Volvo,Ferrari等。
我想将这些实例存储在枚举类中,这样我就可以轻松地通过枚举检索它们。 但是,问题在于,每个实例的构造函数中都有一个参数,因此我不能将其作为枚举的最终属性。 我需要获取从.class创建的超类(带有1个参数)的实例。
伪代码
/* This is my super class */
public abstract class Car{
public Car(Object param){ }
}
/* This is my instance */
public class Volvo extends Car{
public Volvo(Object param){
super(param);
}
}
/* This is my other instance */
public class Ferrari extends Car{
public Ferrari(Object param){
super(param);
}
}
上面的代码正确显示了我制作的类。 好了,现在是枚举类:
public enum CarType{
VOLVO(Volvo.class), FERRARI(Ferrari.class);
private Class<? extends Car> instance;
private CarType(Class<? extends Car> instance){
this.instance = instance;
}
/* This is what I tried, NOT working*/
public Car getCarInstance(Object param){
try{
return Car.class.getConstructor(instance).newInstance(param);
}catch(Exception e){
/* I didn't do bugmasking, but all the exceptions would
make this post look messy.*/
}
}
}
结果需要什么:如果我将调用'CarType.VOLVO.getCarInstance(“ My parameter value”); '它将与'new Volvo(“ my parameter value”);'相同。
提前致谢。
在getCarInstance更改行后,尝试执行以下操作:
return instance.getConstructor(Object.class).newInstance(param);
您不需要Car.class
因为您已经在枚举构造函数中指定了类型。 顺便说一句,不要叫它实例 ,叫它type 。
开始了:
public Car getCarInstance(Object param) {
try {
return type.getConstructor(Object.class).newInstance(param);
} catch (ReflectiveOperationException e) {
throw new IllegalStateException(e);
}
}
第二件事(如您所见)是如何检索正确的构造函数。 如果您想了解更多信息,请阅读更多有关反射的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.