Добавить каждое поле класса с постоянной строкой в ​​Java - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть множество классов, представляющих пользовательские экраны в приложении, которое я тестирую (объекты страницы).Каждый из объектов страницы содержит различное количество элементов с идентификатором.Мне нужно объявить эти идентификаторы.Это выглядит примерно так:

public class MessagesScreen extends BasePage {

    private static final String backArrowButtonID      = PACKAGE_NAME_ID + "backArrow";
    private static final String noMessagesImageID      = PACKAGE_NAME_ID + "empty_messages_icon";
    private static final String noMessagesTextViewI    = PACKAGE_NAME_ID + "label_no_documents";
    private static final String errorTextViewID        = PACKAGE_NAME_ID + "text_error_response";
    private static final String progressBarID          = PACKAGE_NAME_ID + "message_list_progress_bar";
    private static final String messagesRecyclerViewID = PACKAGE_NAME_ID + "messageList";
    private static final String swipeRefreshLayoutID   = PACKAGE_NAME_ID + "swipeRefreshLayout";
    private static final String instantMessageLayoutID = PACKAGE_NAME_ID + "item_instant_message_layout";

}

В каждый из идентификаторов должна быть добавлена ​​переменная окружения, как указано выше.Мой вопрос: есть ли какой-нибудь изящный способ не повторять это PACKAGE_NAME_ID все время?Есть ли способ автоматического назначения постоянной строки для каждого нового поля класса?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Использование enum улучшит ваш код во многих отношениях.В дополнение к решению вашей текущей проблемы, вы будете использовать правильный инструмент для констант.

enum IdKey {

    BACK_ARROW_BUTTON_ID("backArrow"),
    NO_MESSAGES_IMAGE_ID("empty_messages_icon"),
    NO_MESSAGES_TEXT_VIEW_ID("label_no_documents"),
    ERROR_TEXT_VIEW_ID("text_error_response"),
    PROGRESS_BAR_ID("message_list_progress_bar"),
    MESSAGES_RECYCLER_VIEW_ID("messageList"),
    SWIPE_REFRESH_LAYOUT_ID("swipeRefreshLayout"),
    INSTANT_MESSAGE_LAYOUT_ID("item_instant_message_layout");

    private final String suffix;

    private IdKey(String suffix) {
        this.suffix = suffix;
    }

    public String getSuffix() {
        return BasePage.PACKAGE_NAME_ID + this.suffix;
    }
}

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

IdKey.BACK_ARROW_BUTTON_ID.getSuffix();

И код более надежный и чистый.Вы даже можете вкладывать enum как приватный член MessagesScreen.

0 голосов
/ 01 февраля 2019

Поскольку вы не можете обогатить состояние конечных переменных после их оценки, я бы сделал все по-другому: предоставив метод получения, который добавляет желаемый префикс.

public class MessagesScreen extends BasePage {

    private static final String backArrowButtonID   = "backArrow";
    private static final String noMessagesImageID  = "empty_messages_icon";
    ///...

    public String getIdWithPrefix(String constantValue){
        return PACKAGE_NAME_ID + constantValue;
    }

}

Обратите внимание, что с помощью перечисления это будетбыть более устойчивым, поскольку строки принимают очень большой диапазон возможных значений, а перечисления - нет.
Это потребует от вас изменения многих классов, но это полезно.
Ответ ernest_k очень хорошо это показывает.

0 голосов
/ 01 февраля 2019

Я мог бы рассмотреть перечисление в этом случае, вы все равно можете ссылаться на определенное значение в коде и переопределить toString, чтобы вернуть ваше сообщение в нужном вам формате

У меня есть много классов, представляющих пользовательские экраны вприложение, которое я тестирую (объекты страницы).Каждый из объектов страницы содержит различное количество элементов с идентификатором.Мне нужно объявить эти идентификаторы.Это выглядит примерно так:

public enum MessagesScreen {
    BACK_ARROW("backArrow"),
    NO_MESSAGES_IMAGE("empty_messages");

    private String value;
    private Messages(String value) {

    this.value = value;
    }

    @Override public String toString() {

      return PACKAGE_NAME_ID + this.value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...