вернуть список связанных объектов - PullRequest
0 голосов
/ 02 мая 2011

У меня есть класс Category, который реализует интерфейс CategoryManager. Далее идет Card, который поддерживает List<Category>.

Теперь я хотел бы вернуть этот список, но с категориями как CategoryManager, следовательно, List<CategoryManager>. Причина, по которой я это делаю, заключается в том, что «открытый интерфейс» Category крайне уродлив, и я хотел бы сузить его, показав внешнему пользователю только чистую CategoryManager.

Как мне это сделать?

Я придумал следующий метод:

public <T extends CategoryManager> List<T> getAllCategories() {
          return (List<T>) categories; //with categories beeing List<Category>

}

Это работает, но я нахожу это довольно уродливым, потому что я забрасываю сюда и возвращаю List<T>, теряя таким образом информацию и ... Ну, я думаю, вы заметите, что это не красиво по разным причинам.

Может кто-нибудь прийти с лучшим / хорошим решением?

С уважением: -)

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Нет необходимости в <T extends CategoryManager> бите, что делает getAllCategories универсальным методом .Это будет отлично работать:

public class Category implements CategoryManager
{   
    List<Category> categories = new ArrayList<Category>();

    public List<? extends CategoryManager> getAllCategories()
    {
        return categories;
    }
}
1 голос
/ 02 мая 2011

То же самое верно, что и в примере .NET. Вы не должны бросать между типами коллекции. Это работает из-за стирания Java 1002 *. Я был бы немного удивлен, если бы вы не получили предупреждение от актеров.

Наиболее точный вариант:

public List<? extends CategoryManager> getAllCategories()
{
    return categories;
}

Отрицательно то, что List<CategoryManager> - это не то же самое, что List<? extends CategoryManager>. Тем не менее, он соответствует предполагаемому назначению имени метода.

...