Многочисленные ограничения на универсальный тип на основе супер и подклассов в Java - PullRequest
4 голосов
/ 03 ноября 2010

У меня есть общий список класса, который реализует определенный интерфейс.

Элементы списка в интерфейсе также реализуют тот же интерфейс.

public abstract class List<T extends SomeInterface> implements SomeInterface
{
    protected LinkedList<T> m_list;

    ...
}

Итак, теперь я хочу сделать подкласс этого списка, который остается общим, но ограничивает элементы объектами, которые реализуют интерфейс SearchListItem:

public interface SearchListItem
{
    public String getName();
}

Вот что у меня есть для класса SearchList:

public abstract class SearchList<T extends SearchListItem> extends List<T>
{
    public T get(String name)
    {
        ...
    }

    ...
}

Но, конечно, это жалуется на определение класса:

Bound mismatch: The type T is not a valid substitute for the bounded parameter <T extends SomeInterface> of the type List<T>

Так что же мне нужно добавить в объявление класса, чтобы сказать: «SearchList расширяет класс List и имеет дополнительные ограничения на тип общего класса, который включает в себя как SomeInterface (в базовом классе), так и SearchListItem»?

Пожалуйста, скажите мне, могу ли я перефразировать это, чтобы помочь объяснить это.

1 Ответ

6 голосов
/ 03 ноября 2010

Это работает?

public abstract class SearchList<T extends SomeInterface & SearchListItem> extends List<T>
...