Сравните два массива неизвестного типа - PullRequest
0 голосов
/ 18 января 2020

При написании каких-то обобщенных c тестовых логи c я часто использую рефлексию. В данной ситуации я l oop по всем полям класса и сравниваю значения полей. Эти поля могут иметь типы массивов, поэтому я должен различать guish this:

Field[] fields = beanBeforeStore.getClass().getDeclaredFields();
or (Field field : fields) {
    ...
    if (field.getType().isArray()) {
       // How to best compare?
    }
    ...
}

Это все часть теста JUnit, который предоставляет assertArrayEquals, который перегружен для примитивного типа массивы и массивы объектов. Так что для сравнения я должен привести значения к типу массива. Поскольку я хочу оставить эту часть обобщенной c, у меня проблема в том, что массив может быть примитивного типа или любого типа объекта. Каков наилучший способ сделать это?

Некоторая справочная информация: Этот лог c является частью тестирования сохраненных объектов. Поскольку объект сохраняется не как единое целое, а только с данными (нет необходимости сериализовывать службы, которые в свою очередь могут ссылаться на другие объекты). Тесты для каждого поля должны быть указаны c. Некоторые поля должны быть одинаковыми, а другие поля должны быть идентичными (через равно). Хотя некоторые объекты реализуют метод equals, не все поля, которые необходимо проверить, являются частью логики equals c.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Предлагаю не избегать размышлений там, где это разумно. Иначе, судя по звуку, Objects.equals будет соответствовать.

0 голосов
/ 18 января 2020

Попробуйте:

java.util.Arrays.deepEquals(array1, array2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...