Как я могу получить длину общей структуры данных, не зная, какой это будет структура данных? - PullRequest
1 голос
/ 30 сентября 2019

Я создал свою собственную структуру данных, которая функционирует аналогично ArrayDeque и расширяет AbstractList. Смысл этого заключается в том, чтобы хранить другие структуры данных, но не разрешать структуры, которые имеют более чем указанное количество элементов.

Например (мой конструктор):

public MyD(Class<T> t, int limit) 
{
}

Где предел определяет количество элементов, разрешенных для структуры данных, добавляемой в ArrayDeque.

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

public void add(int i, T structure) {}

Где структура может быть чем угодно: от массива, до ArrayList, до очереди и т. Д.

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

Я попытался привести его к простому массиву [], но если список будет пропущен, это нарушит функциональность.

@SuppressWarnings({"unchecked"})
T[] array = (T[])x;

if(array.length > b) { return; }

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете использовать некоторое отражение, чтобы проверить, является ли переданная структура массивом или коллекцией, а затем получить его размер соответственно:

public void add(int i, T structure) {
    int size;
    if (structure.getClass().isArray()) {
        size = Array.getLength(structure);
    } else if (structure instanceof Collection) {
        size = ((Collection) structure).size();
    } else {
        throw new IllegalArgumentException("Structure is neither an array nor a collection");
    }
    if (size > limit) {
        return;
    }
    // ...
}
...