在Java中用常量字符串追加每个类字段
在我正在测试的应用程序(页面对象)中,我有很多代表用户屏幕的类。每个页面对象都包含不同数量的元素,每个元素都有一个ID。我需要声明这些ID。它看起来像这样:在Java中用常量字符串追加每个类字段,java,string,field,Java,String,Field,在我正在测试的应用程序(页面对象)中,我有很多代表用户屏幕的类。每个页面对象都包含不同数量的元素,每个元素都有一个ID。我需要声明这些ID。它看起来像这样: public class MessagesScreen extends BasePage { private static final String backArrowButtonID = PACKAGE_NAME_ID + "backArrow"; private static final String noM
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\u NAME\u ID
?是否有一种方法可以自动将常量字符串分配给每个新的类字段在这种情况下,我可以考虑枚举,您仍然可以引用代码中的特定值并重写ToSt字符串,以您想要的格式返回< /P>消息。
在我正在测试的应用程序(页面对象)中,我有很多代表用户屏幕的类。每个页面对象都包含不同数量的元素,每个元素都有一个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;
}
}
在这里使用
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
的私有成员,因为您无法在对最终变量赋值后丰富其状态,所以我会用另一种方式来做:提供一个添加所需前缀的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;
}
}
请注意,对于枚举,它将更加健壮,因为字符串接受非常大范围的可能值,而枚举不接受这些值。这将要求您更改许多课程,但这是值得的。
欧内斯特的回答很好地说明了这一点 你有没有考虑过使用它们?你能告诉我们你在哪里使用它们吗?也许你可以在那里加前缀?你的代码绝对没有问题,停止搜索最好的方法,顺便说一句,静态变量应该是大写的,snake
PROGRESS\u BAR\u ID
也许您可以将getSuffix()
方法的名称更改为,即getId()
+1,这是一个好主意。无论如何,我喜欢您的答案(谢谢,顺便说一句),但我看到了一个缺点:如果有任何屏幕,它们中的每一个都必须有一个定义了方法和setter的私有枚举。这似乎是很多陈词滥调。是否有任何方法,例如,在字段中添加注释@Id
,以附加env变量?如果这真的是一种动态功能,那么我不会首先使用字段/属性。您是否考虑过使用在构造函数或初始化块中初始化的字符串集合/映射?