java:如何为变量自动生成自定义方法

标签 java intellij-idea getter-setter

我有一种情况,我想为我的字段定义各种行为。

class SomePage {
    //...

    @FindBy(id = "selectEthinicity")
    private WebElement ethinicitySelect;

    @FindBy(id = "someId")
    private WebElement usernameInputField;

     @FindBy(id = "buttonSubmit")
    private WebElement submitButton;


    public void selectEthnicity(String param) throws Exception {
        new Select(ethnicitySelect).selectByVisibleText(param);
    }

    public void selectEthnicityByIndex(String param) throws Exception {
        new Select(ethnicitySelect).selectByIndex(Integer.parseInt(param));
    }

    public int getSelectEthinicityNumberOfOptions() {
        new Select(ethnicitySelect).getOptions().size();    
    }

    public void waitForOptionOfSelectEthnicityToLoad() {
       //logic to wait for an options of Ethinicity to load
    }

    public void selectEthnicity_Wait(String param) throws Exception {
        //wait 
        //select Ethinicity
    }

    public void selectEthnicityByIndex_Wait(String param) throws Exception {
       //wait and 
       //Select Ethnicity by einde
    }


    //custom method for input Field
    public String getUsernameInputFieldValue() {
        usernameInputField.getAttribute("value");
    }

    public void enterUsernameInputField(String param) {
        usernameInputField.sendKeys(param);
    }


    //custom method for button
    public void clickSubmitButton() throws PageValidationException {
        submitButton.click();
    }

    //...
}

这里我有一个 SomePage 类,它是一个由字段 (WebElement) 组成的页面对象(使用页面工厂模式)。

根据字段名的后缀我需要创建一些方法。如果后缀是 *Select,该字段将具有许多方法,这些方法对于所有 select field 都是相似的。如果后缀是 *Button,它将具有 button field 所需的方法。

我能否根据字段名称后缀生成自定义方法。

NOTE: IntelliJ Supports the modification of custom Getters and Setters but it doesn't allow multiple methods per field. It restricts to 1 Getter and 1 Setter per field. Which is not always the case as per example. I my have multiple setter ( kind of setter) or getter for a field.

最佳答案

可以生成自定义类,但动态类生成是一项相当高级的功能,从您的问题来看,它不必要地复杂。

我认为您应该为这些具有相同功能的对象创建一个新类。您应该阅读面向对象编程,因为这是一个相当简单的概念。也许你的例子很糟糕,但你为什么要为每个按钮重新定义 String 函数?这是一个不同设计的示例:

public class Button {
    private String text;

    public Button(String text) {
        this.text = text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

然后声明一堆你的新类。

class Temp {
    Button abcButton = new Button("abc");
    Button cdeButton = new Button("cde");

        // Instead of setAbcButtonToLower()
        abcButton.setText(abcButton.getText().toLowerCase());
        // Instead of getAbcButtonIndexOfChar()
        abcButton.getText().indexOf(c);
        // Instead of getAbcButtonSize()
        abcButton.getText().length();
}

关于java:如何为变量自动生成自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315945/

相关文章:

javascript - 隐藏 getter 或添加到 proto 对象中

java - xuggle-xuggler 5.4 编码音频时出现 NullPointerException

java - JSP属性查找错误

intellij-idea - 退格键不是删除选择而是将其扩展到左侧(Linux 上的 IntelliJ)

python - 启动 IDEA 时出错 : No JVM Installation Found

javascript - ES6 类 setter 不被识别为函数

java - 在 Java 应用程序中通过亚马逊服务器上的 JavaMail API 发送带有附件的邮件时出现空指针异常

java - Parse.com 数据未保存到不同的表/对象

java - GlassFish 需要 Java SE 版本 6。您的 JDK 是版本 0 (Mac)

Java - 空指针异常,但我可以获得值