6

在查看 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,然后在不声明新引用的情况下将其传递给下一个方法不是很有意义吗?

4

2 回答 2

3

好吧,答案是设置final一个变量并且只将它用作函数的参数是完全没有用的。在DefaultElementLocatorFactory构造函数中,与输入参数相关的变量可以自由地重新分配,因为它是原始引用的副本。

PS ...当然,除非按照OP的建议,输入参数改为声明final

于 2012-06-11T16:19:28.103 回答
2

我能想到的最好的事情(假设 selene 开发人员对 java 的工作原理有一个基本的了解——我认为这是给定的):

大概在有一个DefaultElementLocatorFactory类之前,该方法使用了一个匿名内部函数,当重构代码时,某些部分被忽略了。

于 2012-06-11T16:36:40.760 回答