T | | | Animal Plant | | | Dog Cat ..
У меня есть древовидная структура, как и выше, и мне нужно разобрать. Я пытаюсь разработать API, который позволит людям читать это дерево. Как я хочу это сделать, позволяя людям определять объекты, представляющие интерес для этого дерева, и возвращать их. Например, если меня интересуют кошки, я хочу, чтобы мой метод экстрактора возвращал всех кошек. Если я хочу знать обо всех животных, я хочу вернуть все животные объекты.
Я решил, что могу сделать что-то вроде this-
TreeDataExtractor extractor = new TreeExtractor();
extractor.registerLivingThingOfInterest(LivingThings.ANIMAL);
extractor.getData();
Теперь этот метод getData()
будет возвращать разные типы объектов каждый раз. Однажды, он мог вернуть Plant
еще раз, когда он смог вернуть Cat
. Итак, должен ли я просто заставить его вернуть LivingThing
? Если я верну его тип суперкласса, должен ли вызывающий объект применить его в своем коде? Разве это не было бы немного уродливым? Или, должен ли я просто создавать несколько методов getCats()
, getAnimals()
с различными типами конкретных возвратов?
Вы можете использовать универсальность, чтобы метод возвращал разные типы. Пользователь просто должен указать класс как параметр, например:
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);
getData<Class<T extends LivingThing> class, Object param)
?