如果标题相当模糊,请原谅。
请允许我详细说明我的问题:
想象一下,我有一个名为" Car"的类,它是一个抽象类。 现在假设我有多个Car实例,例如奥迪,沃尔沃,法拉利等。
我想将这些实例存储在枚举类中,因此我可以通过枚举轻松检索它们。然而,问题是每个实例在其构造函数中都有一个参数,我不能把它作为枚举中的最终属性。 我需要获取从.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(&#34;我的参数值&#34;); &#39; 它与新沃尔沃相同(&#34;我的参数值&#34;);&#39;
提前致谢。
答案 0 :(得分:0)
在尝试以下的getCarInstance更改行中:
return instance.getConstructor(Object.class).newInstance(param);
答案 1 :(得分:0)
您不需要Car.class
,因为您已在枚举构造函数中指定了类型。顺便说一句,不要将其称为 instance ,将其称为 type 。
我们走了:
public Car getCarInstance(Object param) {
try {
return type.getConstructor(Object.class).newInstance(param);
} catch (ReflectiveOperationException e) {
throw new IllegalStateException(e);
}
}
第二件事(如您所见)是,如何检索正确的构造函数。如果您想了解更多信息,请详细了解reflection。