从String输入创建类

时间:2017-01-04 13:05:51

标签: java processing

我的目标是:能够将一组对象(在本例中为Animal)保存到光盘。然后我希望能够加载它们。我使用JSON来执行此操作,但为了清楚起见,将其留在此代码段中。我希望能够制作更多具有更多字段的Animal类(请参阅下面的Unicorn Class)。

事先无法知道对象的类。如何使用addAnimal输入让String工作?

AnimalWrangler aw;

void setup()
{
  aw = new AnimalWrangler();

  aw.addAnimal("cat");
  aw.addAnimal("horse");
  aw.addAnimal("unicorn");
  aw.addAnimal("unknown");
}

class AnimalWrangler
{

  ArrayList<Animal> animals;

  AnimalWrangler()
  {
    animals = new ArrayList<Animal>();
  }

  void addAnimal(String type)
  {
    //makes an animal according to type        

    ///if type does not exist then throw

    //add to animals array 

  }
}



class Animal
{
  String type;

  Animal()
  {
  }
}

class Cat extends Animal
{
  Animal animal;
  Cat()
  {
    animal = new Animal();
    type = "cat";
  }
}

class Horse extends Animal
{
  Animal animal;
  Horse()
  {
    animal = new Animal();
    type = "horse";
  }
}

class Unicorn extends Animal
{
  Animal animal;
  float magic_level;
  /////classes can have any number of attributes

  Unicorn()
  {
    animal = new Animal();
    type = "unicorn";
  }
}

2 个答案:

答案 0 :(得分:1)

典型的方法是创建一个字符串到类映射的注册表:

static Map<String, Class<? extends Animal>> registry;

然后使用以下类型填充地图:

static {
            registry = new HashMap<>();
            registry.put("cat", Cat.class);
        }

然后,为AnimalWrangler.addAnimal("cat");添加addAnimal方法:

animals.add(registry.get("cat").newInstance());

应该解决它,只要每个类都有一个默认的构造函数。

答案 1 :(得分:0)

可能你正在寻找一个为你这样做的开关语句,例如:

curl -X PUT -T file url