T | | | Animal Plant | | | Dog Cat ..
我有一个像上面那样的树结构,我需要解析它。我正在尝试设计一个让人们阅读这棵树的API。我希望通过让人们在这棵树中指定他们感兴趣的对象并返回它们来实现这一目标。例如,如果我对猫感兴趣,我希望我的提取器方法返回所有猫。如果我想了解所有动物,我想要归还所有动物。
我想我可以做这样的事情 -
TreeDataExtractor extractor = new TreeExtractor();
extractor.registerLivingThingOfInterest(LivingThings.ANIMAL);
extractor.getData();
现在,此方法getData()
每次都会返回不同类型的对象。有一次,它可以返回Plant
另一次它可以返回Cat
。那么,我应该让它返回LivingThing
吗?如果我让它返回一个超类类型,调用者是否应该在他的代码中应用一个强制转换?难道不是有点难看吗?或者,我应该设计多个具有不同具体返回类型的方法getCats()
,getAnimals()
吗?
答案 0 :(得分:3)
您可以使用genericity使方法返回不同的类型。用户只需将类指定为参数,例如:
public <T extends LivingThing> T getData(Class<T> clazz, Object otherParam) {
// insert code here
}
你会像这样使用它:
Cat c = getData(Cat.class, otherParam);
Dog d = getData(Dog.class, otherParam);