Вопрос

Я пытался расширить класс ArrayList без особого успеха.Я хочу расширить его и иметь возможность параметризовать.

Итак, обычно у вас есть что-то вроде

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

Я хочу

MyList<SomeObject> list = new MyList<SomeObject>();

Простое расширение ArrayList не работает.

public class MyList extends ArrayList ...

Когда я пытаюсь его использовать, я получаю сообщение об ошибке

Тип myList не является универсальным;это не может быть параметризовано с помощью аргументов <SomeObject>

Я пробовал вариации

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

безуспешно, если я использую подобъект за именем класса, кажется, что он работает, но по какой-то причине скрывает методы в классе подобъекта.

Любые мысли или предложения о том, как заставить это работать правильно, приветствуются.

Это было полезно?

Решение

Вам необходимо указать тип для ArrayListпараметр типа s.Для параметров универсального типа, T является довольно распространенным явлением.Поскольку компилятор не знает, что такое T то есть вам нужно добавить параметр типа в MyList в котором может быть передан тип.Таким образом, вы получаете:

public class MyList<T> extends ArrayList<T>

Кроме того, вы можете рассмотреть возможность внедрения List и делегирование полномочий ArrayList, вместо того , чтобы наследовать от ArrayList."Отдавайте предпочтение композиции объектов, а не наследованию классов.[Шаблоны проектирования стр.20]"

Другие советы

public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

или

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

Вам не следует расширять ArrayList, расширяйте Абстрактный список вместо этого:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top