2015-07-09 4 views
-1

Мне нужно добавить следующие функции для любой реализации списка <>: - приведенный объект никогда не должен показывать исключение OutOfBounds для положительных индексов - когда вы вызываете get (x), с x = size, он автоматически увеличит список до размера x + 1 и заполнит вновь созданные пространства тем, что пожелает программист (кроме NULL) - помните, что List должен быть общим типом - в противном случае он должен действовать как обычный списокДобавить функциональные возможности в список на Java

Я знаю, что мне нужно использовать шаблон Decorator, по крайней мере, для добавления функциональности, однако я чувствую, что должен также использовать некоторые другие шаблоны проектирования - возможно, Factory или Template, но я не точно Конечно, как.

Может ли кто-нибудь указать хотя бы некоторые подсказки относительно того, как я могу решить вышеупомянутую задачу?

+3

Что вы пробовали? –

+2

Не злоупотребляйте рисунками. Просто декоратор, который реализует get (...), достаточно. – Manu

+2

Как класс списка будет знать, что разместить во вновь созданных пространствах, если код клиента просто вызывает 'list.get (1000)'? Ваш класс не будет знать, как создавать новые объекты родового типа. – Bobulous

ответ

0
class ListImpl<T> extends ArrayList { 

    private Class<T> tType; 

    public ListImpl(Class<T> tType) { 
     this.tType = tType; 
    } 

    @Override 
    public T get(int i) { 
     if (i < this.size()) { 
      T result = (T) super.get(i); 
     } else { 
      int resize = 1 + i - this.size(); 
      // T[] array = (T[]) new Object[resize]; 
      T[] array 
       = (T[]) java.lang.reflect.Array.newInstance(tType, resize); 
      this.addAll(Arrays.asList(array)); 
     } 
     return (T) super.get(i); 
    } 
} 
+2

Почему бы не реализовать 'List' напрямую? – Mackiavelli

+0

Список не является классом, это интерфейс. Таким образом, вам нужно будет реализовать весь метод abtract List. – zeugor

+0

Что делать, если вы не можете преобразовать объект T в Integer, чтобы соответствовать ему в этом массиве? Вам нужно было бы создать массив типа T, а создание универсального массива создаст новый набор проблем. – Scartz

Смежные вопросы