1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/houbinbin-iexcel

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
03-ExcelField-order-列顺序指定.md 3.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 18:23 1807add

Переупорядочивание полей в Java

Обычно реализация основана на прямом получении списка полей Field с помощью отражения Java. Как правило, этот порядок фиксирован.

Однако иногда, например, для выравнивания памяти, JVM может изменить порядок информации о полях Field, что приводит к неопределённости порядка.

Вероятность этого события очень мала, но всё же оно может произойти.

Возможно, вы работаете над сложным продуктом, или у вас строгий клиент, или вы стремитесь к совершенству в технологиях, но эту проблему необходимо решить.

Свойство order

Определение метода

/**
 * Указание порядкового номера
 * Объяснение: по умолчанию обработка выполняется непосредственно через отражение Field, но в некоторых случаях порядок отражённых полей может быть нарушен.
 * Например, при выравнивании памяти вероятность этого события хоть и мала, но можно обработать его, указав свойство order.
 * (1) Чем меньше значение order, тем раньше создаётся столбец excel.
 * (2) Поля без аннотаций имеют значение по умолчанию order=0
 * @return Порядковый номер
 * @since 0.0.5
 */
int order() default 0;

Решение проблемы

Мы выбрали простой способ — через указание свойства order для @ExcelField.

Свойство order определяет порядок результатов генерации excel.

Чтобы сохранить совместимость, по умолчанию используется значение order=0, а если аннотация не указана, то order=0.

Использование

См. тестовый класс ExcelBsOrderTest.

Объект определения

public class UserFieldOrdered {

    @ExcelField(headName = "姓名", order = 1)
    private String name;

    @ExcelField(headName = "年龄", order = 2)
    private int age;

    @ExcelField(headName = "地址", order = 0)
    private String address;

    //Getter/Setter/toString()
}

Тестовый код

final String filePath = PathUtil.getAppTestResourcesPath()+"/userOrdered.xls";
List<UserFieldOrdered> models = buildUserList();
ExcelBs.newInstance(filePath).write(models);

Результат генерации excel

Адрес Имя Возраст
china one 10

Прочее

Неизвестно, как будет выглядеть результат при использовании ASM байт-кода для прямого изменения результата, но мы планируем провести соответствующую оптимизацию позже.

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/houbinbin-iexcel.git
git@gitlife.ru:oschina-mirror/houbinbin-iexcel.git
oschina-mirror
houbinbin-iexcel
houbinbin-iexcel
master