Java. Как проверить, является ли объект ArrayList & lt; String & gt; или List & lt; String & gt; [Дубликат]

Большинство элементов управления MSForms без окон (так как они не являются истинными окнами, скорее они нарисованы непосредственно движком VBA Forms как графические объекты), которые являются «легкими» для сравнения. Это означает, что вы можете сбрасывать больше на пользовательскую форму, чем вы могли бы использовать эквивалентные элементы управления, отличные от MSForms, в форме VB6.

Я не знаю, что такое верхний предел, но он будет либо абсолютным пределом, либо ограничение, налагаемое доступными ресурсами, поэтому, если вы можете добавить 1200, не встречая ни одного из этих & amp; excel ведет себя с точки зрения использования памяти, вы должны быть в порядке.

Тем не менее, это количество элементов управления, кажется, очень сложно представить пользователю сразу!

2
задан lemoncodes 7 September 2012 в 15:48
поделиться

2 ответа

Нет такой вещи, как «тип» ArrayList.

Класс ArrayList хранит список ссылок Object. Он не знает и не заботится о том, являются ли они всего лишь типом.

В общей системе Java добавлена ​​проверка времени компиляции, чтобы помочь вам отслеживать типы. Итак, если вы объявите ArrayList<Person>, вы получите ошибки компиляции, если вы напишете код, который может вставить в ваш список не Person.

Во время выполнения единственный способ рассказать, что находится в ArrayList, чтобы перебрать все содержащиеся элементы и проверить их с помощью instanceof.

8
ответ дан bmargulies 15 August 2018 в 14:43
поделиться
  • 1
    hmmm, я получил вашу точку зрения, поэтому нет способа действительно уменьшить строки кода, проверяющие элементы массива за один раз, я имею в виду, что мне нужно жестко кодировать алгоритм для проверки каждого элемента: D собираюсь принять этот ответ немного, может быть, есть ребята, которые знают гораздо более простой способ: D – lemoncodes 7 September 2012 в 23:27
  • 2
    после исчерпания всех усилий не получалось ничего, кроме этого, он должен вручную проверять каждый элемент и преобразовывать его в конкретный тип объектов в arraylist .. этот вариант является лучшим выбором для тех, кто хочет простой способ проверки типов в arraylist – lemoncodes 8 September 2012 в 12:11

На самом деле есть способ без кастования каждого элемента вручную (он все еще уродлив, хотя ..)

//start with an arraylist of unknown generic type
ArrayList <Object> obj = getData();

//Make an array from it(basically the same as looping over the list
// and casting it to the real type of the list entries)
Object[] objArr = obj.toArray();

//Check if the array is not empty and if the componentType of the 
//array can hold an instance of the class Person 
if(objArr.length>0 
    && objArr.getClass().getComponentType().isAssignableFrom(Person.class)) {
    // do sth....
}

Это не должно давать никаких предупреждений.

Вы можете использовать он выглядит следующим образом:

private boolean isArrayOfType(Object[] array,Class<?> aClass) {
    return array.length > 0
            && array.getClass().getComponentType().isAssignableFrom(aClass);
}
Object[] personArr = getData().toArray();
if(isArrayOfType(personArr,Person.class) {
   //Do anything...

}

Что не будет работать:

// -> This won't work, sry!
       ArrayList<Person> personArrayList = Arrays.asList((Person[])personArr);
3
ответ дан Leo Gerber 15 August 2018 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: