我的目标是:能够将一组对象(在本例中为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";
}
}
答案 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