gpt4 book ai didi

java - 扩展或重写外部基类以添加随后也存在于外部子类中的功能

转载 作者:行者123 更新时间:2023-12-01 14:05:49 25 4
gpt4 key购买 nike

好吧,这很难解释,在过去的几年里我已经多次为此苦苦挣扎。我确信一定有一种以某种方式做到这一点的模式,但遗憾的是我没有意识到这一点。

拥有一个外国库的基类和几个子类(今天是关于 Selenium 的)我想在基类中引入一些辅助方法(使用已经存在的方法),这些方法也可以在外国子类中使用扩展该类的类。

具体示例:

Selenium 的 WebDriver 类提供了一个 findElement 方法来查找 DOM 中的元素。最后一个特定的WebDriver例如(ChromeDriverFirefoxDriver)必须用于所有子类 WebDriver

话虽如此,我想使用一些方便的方法来扩展 WebDriver,然后可以将这些方法与所有子类化驱动程序一起使用。例如。我想注入(inject)一个 findElementTimeout 方法,其中或多或少包含类似的内容:

manage().timeouts().implicitlyWait(毫秒,TimeUnit.MILLISECONDS);
WebElement 元素 = findElement(选择器);
管理().timeouts().implicitlyWait(0,TimeUnit.MILLISECONDS);
返回元素;

事实上,它根本与 Selenium 无关,而是一个非常通用的用例。使用已经给出的方法更改外国软件的父类。谁能指出我在这种情况下使用的通用解决方案?

最佳答案

如果不借助字节码工具,就无法动态修改 Java 中的类。本例中使用的通用软件工程解决方案是装饰器模式。

您可以创建一个无状态包装类,它将基类作为单个构造函数参数,例如:

 public class WebDriverDecorator {
public final WebDriver webDriver;

public WebDriverDecorator(WebDriver wd) {
this.webDriver = wd;
}

// add your conveniece methods here
}

然后,在子类中或任何其他拥有 WebDriver 实例的地方,您可以使用 WebDriverDecorator 装饰它并调用您的便捷方法:

WebDriver wd = ....;
WebDriverDecorator wdd = new WebDriverDecorator(wd);
wdd.yourMethodCallGoesHere();

关于java - 扩展或重写外部基类以添加随后也存在于外部子类中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com