我有低级(即不能依赖更高级别的模块)MySQL DAO包返回多态对象
abstract class MySQLAnimal {
int a;
}
class MySQLCat extends MySQLAnimal {
int b;
}
Collection<MySQLAnimal> retrieveAllMySQLAnimals(...) {...}
然后,我有这个包的使用者提供抽象(即它不知道如何检索它们)并包含具有镜像类层次结构的类:
abstract class Animal {
int a;
}
class Cat extends Animal {
int b;
}
Collection<Animal> retrieveAllAnimals(...) {...}
我试图在这个消费者包中编写一个适配器,需要使用MySQL DAO检索MySQLCat
对象并以抽象类的形式返回它(即实现retrieveAllAnimals(...)
方法) 。什么是最干净的方式(阅读:无需致电instanceof
)这样做?
答案 0 :(得分:0)
从HashMap
到Class
有一个Class
。当一个对象进入它自己的类HashMap
中查找它然后实例化一个新类的对象并使用反射来复制同名的所有成员变量。
将来支持新类所需的唯一更改是添加新的映射,这些映射可以存储在配置文件中。
即
mapping.put(MySQLCat.class, Cat.class);
Class<? extends Animal> targetClass = mapping.get(objectToMap.getClass());