Java—通过<;获取抽象类的实例;上课?扩展超类>;带参数

Java—通过<;获取抽象类的实例;上课?扩展超类>;带参数,java,enums,instance,Java,Enums,Instance,如果标题很模糊,请原谅 请允许我详细说明我的问题: 假设我有一个名为“Car”的类,它是一个抽象类。 现在假设我有多个汽车实例,例如奥迪、沃尔沃、法拉利等 我想将这些实例存储在一个enum类中,这样就可以通过enum轻松地检索它们。然而,问题是每个实例的构造函数中都有一个参数,我不能将其作为枚举中的最终属性。 我需要获取从.class创建的超类(带有1个参数)的实例 伪代码 /* This is my super class */ public abstract class Car{ pu

如果标题很模糊,请原谅

请允许我详细说明我的问题:

假设我有一个名为“Car”的类,它是一个抽象类。 现在假设我有多个汽车实例,例如奥迪、沃尔沃、法拉利等

我想将这些实例存储在一个enum类中,这样就可以通过enum轻松地检索它们。然而,问题是每个实例的构造函数中都有一个参数,我不能将其作为枚举中的最终属性。 我需要获取从.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);
   }
}
上面的代码正确地显示了我创建的类。 好了,现在是enum类:

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.*/
       }
   }
}
公共枚举类型{
沃尔沃(沃尔沃级)、法拉利(法拉利级);

尝试以下操作后getCarInstance更改行中的私有类:

return instance.getConstructor(Object.class).newInstance(param);

您不需要
Car.class
,因为您已经在枚举构造函数中指定了类型。顺便说一下,不要调用它的实例,而是调用它的类型

我们开始:

public Car getCarInstance(Object param) {
    try {
        return type.getConstructor(Object.class).newInstance(param);
    } catch (ReflectiveOperationException e) {
        throw new IllegalStateException(e);
    }
}

第二件事(如您所见)是如何检索正确的构造函数。如果您想了解更多信息,请阅读更多信息。

谢谢。谢谢!谢谢,谢谢!