在查看Selenium源代码时,我在PageFactory中注意到以下内容:
public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
T page = instantiatePage(driver, pageClassToProxy);
initElements(driver, page);
return page;
}
public static void initElements(WebDriver driver, Object page) {
final WebDriver driverRef = driver;
initElements(new DefaultElementLocatorFactory(driverRef), page);
}
拥有以下一行有什么好处?
final WebDriver driverRef = driver;
将参数设为final,然后将其传递给下一个方法而不声明新引用是不是有意义?
答案 0 :(得分:3)
嗯,答案是在变量上设置final
并仅将其用作函数的参数完全没用。在DefaultElementLocatorFactory
构造函数中,可以自由地重新分配与input参数相关的变量,因为它是原始引用的副本。
P.S。 ...当然,除非OP建议,否则输入参数将被声明为final
。
答案 1 :(得分:2)
我能想出的最好的事情(假设selene开发人员对java的工作原理不仅仅有一个基本的理解 - 我认为这是给出的):
大概在有DefaultElementLocatorFactory
类之前,该方法使用匿名内部函数,当代码被重构时,某些部分被忽略了。