Извлечение данных из дерева

1
                           T                 
                           |
                       |       |
                     Animal  Plant
                       |
                   |       |
               Dog   Cat  ..

У меня есть древовидная структура, как и выше, и мне нужно разобрать. Я пытаюсь разработать API, который позволит людям читать это дерево. Как я хочу это сделать, позволяя людям определять объекты, представляющие интерес для этого дерева, и возвращать их. Например, если меня интересуют кошки, я хочу, чтобы мой метод экстрактора возвращал всех кошек. Если я хочу знать обо всех животных, я хочу вернуть все животные объекты.

Я решил, что могу сделать что-то вроде this-

    TreeDataExtractor extractor = new TreeExtractor();
    extractor.registerLivingThingOfInterest(LivingThings.ANIMAL);
    extractor.getData();

Теперь этот метод getData() будет возвращать разные типы объектов каждый раз. Однажды, он мог вернуть Plant еще раз, когда он смог вернуть Cat. Итак, должен ли я просто заставить его вернуть LivingThing? Если я верну его тип суперкласса, должен ли вызывающий объект применить его в своем коде? Разве это не было бы немного уродливым? Или, должен ли я просто создавать несколько методов getCats(), getAnimals() с различными типами конкретных возвратов?

Теги:
design

1 ответ

3
Лучший ответ

Вы можете использовать универсальность, чтобы метод возвращал разные типы. Пользователь просто должен указать класс как параметр, например:

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);
  • 0
    должен ли это быть getData<Class<T extends LivingThing> class, Object param) ?
  • 1
    @ Джей нет, я так не думаю. Фильтр после модификатора видимости уже сужает возможные типы. Кроме того, я считаю, что то, что вы написали, вызывает синтаксическую ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню