我正在测试的应用程序(页面对象)中有很多类代表用户屏幕。每个页面对象都包含各种元素,每个元素都有一个ID。我需要声明这些ID。看起来像这样:
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";
}
每个ID都需要添加如上所述的环境变量。
我的问题是:是否有所有不必重复此PACKAGE_NAME_ID
的好方法?有没有一种方法可以自动将常量字符串分配给每个新的类字段?
答案 0 :(得分:2)
在此处使用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();
并且代码更加可靠和简洁。您甚至可以将枚举嵌套为MessagesScreen
的私有成员。
答案 1 :(得分:1)
在这种情况下,我可能会考虑使用枚举,您仍然可以在代码中引用特定值,并覆盖toString以所需的格式返回消息
我正在测试的应用程序(页面对象)中有很多类代表用户屏幕。每个页面对象都包含各种元素,每个元素都有一个ID。我需要声明这些ID。看起来像这样:
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;
}
}
答案 2 :(得分:1)
由于您无法在最终变量的赋值后丰富其状态,因此我将采取另一种方式:提供一个添加所需前缀的getter。
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的答案非常清楚。