我的目标是:能够将一组对象(在本例中为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";
}
}
最佳答案
典型的方法是创建一个字符串到类映射的注册表:
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());
只要每个类都有一个默认构造函数,就可以解决它。